如何在R中使用sapply重复每一行的功能

时间:2017-06-22 06:21:53

标签: r for-loop dataframe sapply

我有一个包含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()中从下到上遍历每一行,以便在同一个变量中重新保存值?

1 个答案:

答案 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