首页 > 解决方案 > 计算每月基金回报

问题描述

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 返回条目为空白?

非常感谢

标签: r

解决方案


我不知道您如何构建数据以及您希望计算的回报是多少,但也许这可以作为灵感:


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]


推荐阅读