2017-06-12 102 views
0

我有以下數據框,需要計算3年的化合物回報。計算連續的化合物回報

2013  2014  2015  2016  Compound 
21480 26384 166760 259842 12.1 
104530 92259 80700 79434  0.76 
28245 31614.7 29591.3 28557.1 1.01 

最後一列Compound是以下公式中的2013-16數據的第三行的乘積:

(31614.7/28245) * (29591.3/31614.7) * (28557.7/29591.3) = 1.0111 

以下是我的啞代碼:

CR <- rep(1,3); 
Compounding_Yrs <- 3; 
Annual_Gwth <- data.frame(matrix(NA, nrow = 3, ncol = 3)); 
for(i in 1:nrow(dt)) 
for(j in 1:Compounding_Yrs) 
{ 
    Annual_Gwth[i,j]<-dt[i,j+1]/dt[i,j]; 
    CR[i]<-CR[i]*Annual_Gwth[i,j] 
} 

CR是最後一列中的複合率。我的數據集dt有超過10萬行,所以上面的代碼非常慢。

必須有更好的方法來做到這一點。將不勝感激任何幫助。

回答

0

希望我沒有得到這個問題錯了T2,由於中間項取消關閉,因此解決方案歸結爲T2處的值/ T1處的值。例如:

(31614.7/28245)*(29591.3/31614.7)*(28557.7/29591.3)= 1.0111

歸結起來: 28557.7/28245,因爲其它術語取消關閉。

所以我簡單的解決方案是將第4列與第1列分開並記錄在最後一列。這也將處理可能出現在中間列的任何0(由於缺少數據等):

DF[,5] <- DF[,4]/DF[,1] 
0

所有你需要的是去年除以第一年。

E.g.在第3行:

> 28557.1/28245 
[1] 1.01105 

而且你不必遍歷行。 R適用於矢量。

所以

dt[,4]/dt [,1] 

將做的工作。

0

你可以做一次全部以量化的方式(df是您的數據):當連鎖多年T1之間的配合

(df[,2]/df[,1])*(df[,3]/df[,2])*(df[,4]/df[,3])