我想请求一些关于如何创建股票数据累积收益新栏的帮助。我的数据结构如下:使用数据表R计划累计收益期计算
Month Stock Ret
Jan-2001 A 0.01
Feb-2001 B 0.02
Jan-2002 B 0.01
Feb-2002 B 0.03
该数据为10年。我想为每只股票以12个月为增量计算累计回报。
例如,第一期回报将涵盖2001年1月至2001年12月。第二阶段将从2001年2月到2002年1月的 等等。
这些计算将按每只股票进行,并将使用每个周期计算的非累计回报。由于我有很多年的股票,我想看看是否有更有效的方法来做这些计算比for循环。
我一直在寻找方法来尝试和data.table包做,但我不确定如何做到这一点。
编辑:
也许我的循环功能,可以更好地解释我想达到的目标。
my.data <- data.frame(Date = seq.Date(as.Date('2001-01-01'), by ='month', length = 24), stock = factor(c(rep('A', 2*12), rep('B', 2*12))), Ret = c(rep(c(.02,.01,0,.03,.02,.01,02,.01,0,.03,.02,.01), 2)))
final_table <- list()
num_periods <- 2*12-12
for(i in unique(my.data$stock)){
ts_i = ts(my.data[my.data$stock==i, 'Ret'])
table_i = matrix(nrow=length(ts_i), ncol=15)
num_periods = length(ts_i)-12
table_i[,1] = ts_i
table_i[,14] = i
table_i[,15] = ts(my.data[my.data$stock==i,'Date'])
for(j in 1:num_periods){
myperiod = cumprod(ts_i[j:(j+11)]+1)-1
table_i[12+j,2:13] = myperiod
}
colnames(table_i) = c('original', paste0('p',-12:-2),'p1','stock','Date')
final_table[[i]] = table_i
}
new.my.data = do.call('rbind',final_table)
new.my.data = na.omit(new.my.data)
问题缺乏可重现的例子 – jangorecki
也许我的循环函数可以更好地解释我想实现的目标。 – Joshua