2016-11-25 40 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