2016-11-25 38 views
-1

我想要在向下移動數據框列時計算百分比更改,但需要額外的條件。以下面的表格爲例,我想計算日期之間的百分比變化,但在計算之前在相同的時間段內減去Value.2。減法不會影響Value.1,因爲下一個時期的百分比變化需要完整的值。如何使用標準列計算期間更改

 Date Value.1 Value.2 Percent.Change 
1 1/1/2017  100  NA    NA 
2 1/2/2017  105  NA   0.05 
3 1/3/2017  103  NA   -0.02 
4 1/4/2017  101  NA   -0.02 
5 1/5/2017  99  10   -0.12 
6 1/6/2017  115  NA   0.16 

我不確定的部分是條件計算。我可以計算期間回報沒有問題,但我會使用Value.1列做到這一點。我不確定如何計算期間收益,同時從Value.1中減去Value.2進行計算,然後將Value.2返回到Value.1進行下一期的計算。

N.B.該表顯示了我正在嘗試解決的值。

歡迎所有幫助,謝謝!

回答

1

數據
df <- data.frame("Date" = c("1/1/2017","1/2/2017","1/3/2017","1/4/2017","1/5/2017","1/6/2017"), 
       "Value.1" = c(100,105,103,101,99,115), "Value.2" = c(NA,NA,NA,NA,10,NA)) 

這應該做IT-

df$percent.change <- c(NA, ((df[2:nrow(df), "Value.1"] - 
         ifelse(is.na(df[2 : nrow(df), "Value.2"]), 
           0, df[2:nrow(df), "Value.2"])) 
         - df[1:(nrow(df) - 1), "Value.1"])/df[1:(nrow(df)-1),"Value.1"]) 
+0

這可以縮短稍:'變換(DF,frac_chg = C(NA,(差異(Value.1) - ifelse (is.na(Value.2 [-1]),0,Value.2 [-1]))/頭(Value.1,-1)))' –

+0

感謝你們! – tommygun