r - 计算每月基金回报
问题描述
ln_f5 <- log(Fund_5, base = exp(1))
n <- nrow(Date)
ln_returns_f5 <- ((ln_f5[2:(n+1), 1] - ln_f5[1:n, 1])/ln_f5[1:n, 1])
在这里,我将我的基金样本缩小到一只基金并记录了日志 (ln_f5)。
然后我尝试根据我在网上找到的上述公式计算回报。
当我查看 ln_returns_f5 的结果时,应该没有第 n 天的单元格返回条目(因为没有 n-1 的结果)。
相反,第 n+1 天的回报在第 n 天的单元格中。
我将如何有效地将所有单元格结果向前移动一个周期,以便我的 n 返回条目为空白?
非常感谢
解决方案
我不知道您如何构建数据以及您希望计算的回报是多少,但也许这可以作为灵感:
library(data.table)
# For long data:
dt_long<-ggplot2::economics_long
setDT(dt_long)[order(date),return:=(value/shift(value,n=1, type = 'lag')-1)*100,by=variable]
# For wide data
dt<-ggplot2::economics
setDT(dt)
return_columns<-names(dt[,-"date"])
dt[,paste("return_",return_columns):=lapply(.SD,function(x){(x/shift(x,n=1, type = 'lag')-1)*100}),.SDcols=return_columns]