R: Рассчитать ежемесячные доходы по группам на основе ежедневных цен - PullRequest
0 голосов
/ 27 мая 2019

У меня есть большой фрейм данных crsp, который содержит несколько столбцов ежедневных данных о запасах.Для этого вопроса важны следующие столбцы (небольшая выдержка, чтобы дать вам представление):

PERMNO   date         monthyear  PRC       RET
10001    1990-01-02   199001     10.1250   0.0000
10001    1990-01-03   199001     10.0000  -0.0123
...
10001    1990-02-01   199002     10.0000   0.0000
10001    1990-02-02   199002     10.0625   0.0062
...
10002    1990-01-02   199001      6.1250   0.0000
10002    1990-01-03   199001      6.2000   0.0122
...
10002    1990-02-01   199002      6.2500   0.0000
10002    1990-02-02   199002      6.5000   0.0400
...

"PERMNO" - идентификатор акции, "date" фактическая дата, "monthyear" - месяц, "PRC" - это цена, а "RET" - дневной доход.

Я пытаюсь добавить новый столбец "MonthlyReturn", в котором указан ежемесячный доход для каждой акции.Поэтому значение следует рассчитывать для каждого месяца каждого запаса (сгруппированного по PERMNO).

Насколько мне известно, для этого могут быть две возможности:

  1. Рассчитатьежемесячный доход путем деления последней цены каждого месяца каждой акции на первую цену месяца (осторожно: из-за выходных первый торговый день месяца не обязательно является фактическим 1-м днем ​​месяца)
  2. Преобразуйте существующие дневные доходы в ежемесячные.

В любом случае, я стремлюсь к следующему результату:

PERMNO   date         monthyear  PRC       RET      MonthlyReturn
10001    1990-01-02   199001     10.1250   0.0000   0.1000
10001    1990-01-03   199001     10.0000  -0.0123   0.1000
...
10001    1990-02-01   199002     10.0000   0.0000   0.0987
10001    1990-02-02   199002     10.0625   0.0062   0.0987
...
10002    1990-01-02   199001      6.1250   0.0000  -0.0034
10002    1990-01-03   199001      6.2000   0.0122  -0.0034
...
10002    1990-02-01   199002      6.2500   0.0000   0.2340
10002    1990-02-02   199002      6.5000   0.0400   0.2340
...

В ходе исследования я наткнулся на функцию monthReturn из QuantMod,может ли это быть полезным?

Любая помощь будет принята с благодарностью, так как я только начал изучать R. Также не стесняйтесь добавлять все, что может помочь мне улучшить пригодность этого вопроса для SO.

1 Ответ

1 голос
/ 27 мая 2019

Используя Tidyverse, вы можете рассчитать свой ежемесячный доход следующим образом:

library(tidyverse)
library(lubridate)

df <- left_join(df, df %>%
  arrange(PERMNO, date) %>% # order the data  by stock id and date
  filter(!wday(as.Date(date)) %in% c(1,7)) %>% # filter week end
  group_by(PERMNO, monthyear) %>% 
  mutate(MonthlyReturn = last(PRC) / first(PRC) - 1) %>% # calculate the monthly return per stock id and month
  select(PERMNO, monthyear, MonthlyReturn)) # Keep only these 3 columns

Надеюсь, это поможет.

...