Ich möchte um Hilfe bitten, wie neue Spalten kumulative Rückgaben von Bestandsdaten zu erstellen. Meine Daten sind wie folgt aufgebaut:R Programmieren kumulative Rückholperioden Berechnungen mit Datentabelle
Month Stock Ret
Jan-2001 A 0.01
Feb-2001 B 0.02
Jan-2002 B 0.01
Feb-2002 B 0.03
Die Daten sind für 10 Jahre. Ich möchte kumulative Renditen in 12-Monats-Schritten für jede Aktie berechnen.
Zum Beispiel würde die erste Periode der Rückkehr von Januar 2001 bis Dezember 2001 abdecken. Die zweite Periode wäre von Februar 2001 bis Jan-2002 und so weiter.
Diese Berechnungen würden pro Bestand durchgeführt werden und würden für jede Periodenberechnung nicht kumulative Erträge verwenden. Da ich viele Jahre lang viele Aktien hatte, wollte ich sehen, ob es eine effizientere Möglichkeit gibt, diese Berechnungen durchzuführen als eine For-Schleife.
Ich habe nach Möglichkeiten gesucht, es mit data.table Paket zu versuchen, aber ich bin unsicher, wie das geht.
Edit:
Vielleicht ist meine Loop-Funktion kann besser erklären, was ich erreichen will.
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)
Frage fehlt reproduzierbaren Beispiel – jangorecki
Vielleicht kann meine Loop-Funktion besser erklären, was ich erreichen möchte. – Joshua