我想請求一些關於如何創建股票數據累積收益新欄的幫助。我的數據結構如下:使用數據表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