我有一个包含4行的数据框。我必须对同一列的当前行值和前一行值求和,但应迭代直到列的顶部
aa<-data.frame(groupid=c(0:3),var=rep(10,4))
>aa
groupid var
0 10
1 10
2 10
3 10
#if iterating over only 4th row
>i=4
#What I want to achieve->
>for(x in 1:aa$groupid[i]) {
aa$var[i]<-aa$var[i]+aa$var[i-x]
}
>aa$var[i]
40 #aa$var[4]+aa$var[3]+aa$var[2]+aa$var[1]
#How I want to achieve--> using sapply() as my real data frame is huge and
#for loop is taking a lot of time
#What I have achieved till now-->
>bb<-sapply(aa$groupid[i], function(x){
sum(aa$var[i],aa$var[i-x])
})
>bb
20 #aa$var[4]+aa$var[3]
如何在sapply()中从下到上遍历每一行,以便在同一个变量中重新保存值?
答案 0 :(得分:1)
你的循环计算所有先前行的累积总和(包括它被评估的行)。
在这种情况下,解决方案很简单:
aa$var2 = cumsum(aa$var)
结果:
> aa
groupid var var2
1 0 10 10
2 1 10 20
3 2 10 30
4 3 10 40