我有一些数据,如下面的数据框:
df = data.frame(name=c(rep("Group1",5),rep("Group2",5)),
mon=c(1,2,3,4,5,1,2,3,4,5),
amt=c(10,NA,NA,NA,NA,15,NA,NA,NA,NA),
inc=c(.1,.1,.2,.2,.3,.1,.1,.2,.2,.3))
df
name mon amt inc
1 Group1 1 10 0.1
2 Group1 2 NA 0.1
3 Group1 3 NA 0.2
4 Group1 4 NA 0.2
5 Group1 5 NA 0.3
6 Group2 1 15 0.1
7 Group2 2 NA 0.1
8 Group2 3 NA 0.2
9 Group2 4 NA 0.2
10 Group2 5 NA 0.3
有多个组,第一个金额列(AMT)已填充,但组中的其余部分为空.我还有另一个列(INC),它是我想增加Amount字段的百分比,如果它当前为空的话.当我到达下一组时,我想重新开始这一过程.
例如,Group1 MON 2将是10*(1+0.1)=11,MON 3将是先前计算的MON 2值的20%的增加:11*(1+0.2)=13.2,依此类推.
我一直在try 使用dplyr和Lag函数,但我要么无法让它工作,要么它不是为此而构建的,我不知道哪种函数可以工作.我能够使用循环来迭代数据帧,并获得我想要的结果,但我希望更优雅地做这件事,使我成为一个使用R更好的编码者.
下面是我构建的当前正在运行的循环:
for (i in 1:nrow(df)){
df$amt[i] = ifelse(df$mon[i]==1,
df$amt[i],
df$amt[i-1]*(1+df$inc[i]))
}
df
name mon amt inc
1 Group1 1 10.000 0.1
2 Group1 2 11.000 0.1
3 Group1 3 13.200 0.2
4 Group1 4 15.840 0.2
5 Group1 5 20.592 0.3
6 Group2 1 15.000 0.1
7 Group2 2 16.500 0.1
8 Group2 3 19.800 0.2
9 Group2 4 23.760 0.2
10 Group2 5 30.888 0.3