我想每天计算多个周期(每天,每月,每周,每季度等)的股票收益。基本上,我具有以下数据集,并且我想添加其他列,其中每一天都有每周,每月,每季度等回报。
library(tidyquant)
library(dplyr)
MSFT <- na.omit(SP500) %>% select(c('symbol', 'date', 'adjusted')) %>%
filter(symbol=='MSFT') %>%
tq_mutate(select = adjusted, mutate_fun = dailyReturn, col_rename = 'simple_daily')
使用tidyquant软件包,例如,如果我使用monthlyReturn
函数,我只会在每个月底获得回报。相反,我想要的是数据集每一天的月收益。
有什么方法可以将此功能应用于数据集的每个观测值(一天)?对执行此过程的替代方案有何建议?
非常感谢
Emanuele
答案 0 :(得分:1)
您需要通过lag
对数据进行20个工作日的计算来计算收益:
library(dplyr
df <- data.frame(symbol="MSFT",Price=runif(40))
df%>%
mutate(monthly_return=Price/lag(Price,20)-1)
symbol Price monthly_return
1 MSFT 0.06606346 NA
2 MSFT 0.93950484 NA
3 MSFT 0.35694822 NA
4 MSFT 0.50215478 NA
5 MSFT 0.55052927 NA
6 MSFT 0.10507392 NA
7 MSFT 0.70965491 NA
8 MSFT 0.73443583 NA
9 MSFT 0.18867477 NA
10 MSFT 0.47592981 NA
11 MSFT 0.47760796 NA
12 MSFT 0.10975491 NA
13 MSFT 0.67172197 NA
14 MSFT 0.65957624 NA
15 MSFT 0.53295690 NA
16 MSFT 0.60927845 NA
17 MSFT 0.34113058 NA
18 MSFT 0.55938078 NA
19 MSFT 0.19547903 NA
20 MSFT 0.25671083 NA
21 MSFT 0.05525222 -0.16364940
22 MSFT 0.85370547 -0.09132403
23 MSFT 0.14294135 -0.59954598
24 MSFT 0.39539573 -0.21260188
25 MSFT 0.93238011 0.69360678
26 MSFT 0.20216682 0.92404382
27 MSFT 0.75496007 0.06384112
28 MSFT 0.62566157 -0.14810588
29 MSFT 0.57485095 2.04678225
30 MSFT 0.36178250 -0.23984063
31 MSFT 0.78743389 0.64870344
32 MSFT 0.92720872 7.44799343
33 MSFT 0.25836030 -0.61537614
34 MSFT 0.36156615 -0.45182053
35 MSFT 0.65566870 0.23024713
36 MSFT 0.17325979 -0.71563119
37 MSFT 0.55117234 0.61572246
38 MSFT 0.31505656 -0.43677621
39 MSFT 0.21256675 0.08741456
40 MSFT 0.44369580 0.72838754