【问题标题】:How to reiterate function on each row using sapply in R如何在 R 中使用 sapply 在每一行上重复功能
【发布时间】:2017-06-22 06:21:53
【问题描述】:

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

【问题讨论】:

    标签: r for-loop dataframe sapply


    【解决方案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
    

    【讨论】:

    • 我得到了答案!谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多