=> {city: "seattle", state: "WA", population: 652405, land area: 83.9}
在这里,我将我的资金样本缩小到一个基金,并记录了日志(ln_f5)。
然后我尝试根据上面在网上找到的公式计算收益。
当我查看ln_returns_f5的结果时,第n天应该没有单元格返回条目(因为n-1没有结果)。
相反,第n + 1天的返回值位于第n天的单元格中。
我如何有效地将所有单元格结果向前移动一个周期,以便我的n的返回条目为空白?
非常感谢
答案 0 :(得分:1)
我不知道您如何构造数据以及想要计算什么收益,但是也许可以作为启发:
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]
答案 1 :(得分:0)
您可以使用dplyr
y <- c(8,10,12,14,16,18)
my_return <- ifelse(is.na((y-lag(y))/lag(y)), 0, (y-lag(y))/lag(y))
返回
[1] 0.0000000 0.2500000 0.2000000 0.1666667 0.1428571 0.1250000
如果可以在开始时使用ifelse(is.na())
,则可以跳过整个NA
部分。