【问题标题】:Conditional cumulative sum with apply functions in RR中具有应用函数的条件累积和
【发布时间】:2013-08-23 15:17:32
【问题描述】:

可能这个问题已经在 SO 中得到解决和回答,但无法找到。我正在计算一个非常大的数据帧上的条件的累积和。看下面的例子

Data=data.frame("Catg"=c("A","A","A","A","A","B","B","B","C","C","C","D","D","D","D","D","D","D","D","E","E","F"),"Val"=c(67,42,12,32,28,1,11,9,38,61,75,99,22,44,89,99,51,34,82,99,74,42))
Res=NULL
UniqCatg=unique(Data$Catg)
for(i in 1:length(UniqCatg))
    Res=c(Res, cumsum(Data[Data$Catg==UniqCatg[i],"Val"]))
Data$Res=Res
Data

有没有一种不使用 for 循环的聪明方法? (如应用函数)

【问题讨论】:

  • 您好,我注意到您从未接受了答案。您可能需要阅读网站的 aboutFAQ 部分,以帮助您充分利用 SO。如果某个答案确实解决了您的问题,您可能需要考虑投票和/或将其标记为已接受,以表明问题已得到回答,方法是勾选合适答案旁边的绿色小复选标记。您没有义务这样做,但它有助于保持网站没有未回答的问题,并奖励那些花时间解决您的问题的人。

标签: r apply cumsum


【解决方案1】:

你可以使用ave:

Data$Res <- ave(Data$Val, Data$Catg, FUN=cumsum)
#   Catg Val Res
#1     A  67  67
#2     A  42 109
#3     A  12 121
#4     A  32 153
#5     A  28 181
#6     B   1   1
#7     B  11  12
#8     B   9  21
#9     C  38  38
#10    C  61  99
#11    C  75 174
#12    D  99  99
#13    D  22 121
#14    D  44 165
#15    D  89 254
#16    D  99 353
#17    D  51 404
#18    D  34 438
#19    D  82 520
#20    E  99  99
#21    E  74 173
#22    F  42  42

【讨论】:

  • 谢谢老兄!它对我有帮助
  • +1 - 我想发布这个,但是如果你不输入 FUN 你会得到一个错误,我一辈子都无法弄清楚为什么这对我不起作用...直到你发布它。由于... 用于分组变量我猜
【解决方案2】:

或者plyr::ddply...

require( plyr )
ddply( Data , "Catg" , transform , Res = cumsum(Val) )
#   Catg Val Res
#1     A  67  67
#2     A  42 109
#3     A  12 121
#4     A  32 153
#5     A  28 181
#6     B   1   1
#7     B  11  12
#8     B   9  21
#9     C  38  38
#10    C  61  99
#11    C  75 174
#12    D  99  99
#13    D  22 121
#14    D  44 165
#15    D  89 254
#16    D  99 353
#17    D  51 404
#18    D  34 438
#19    D  82 520
#20    E  99  99
#21    E  74 173
#22    F  42  42

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-12-05
    • 2013-05-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多