【发布时间】:2016-04-22 13:21:29
【问题描述】:
我想就如何创建新的股票累积回报列数据请求一些帮助。我的数据结构如下:
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)
【问题讨论】:
-
问题缺乏可重复的例子
-
也许我的循环函数可以更好地解释我想要实现的目标。
标签: r data.table