R中带apply函数的条件累积和
可能这个问题已经在SO中得到了解决和回答,但无法找到答案。我在一个非常大的数据帧上计算条件的累积和。看看下面的例子R中带apply函数的条件累积和,r,apply,cumsum,R,Apply,Cumsum,可能这个问题已经在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=
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循环的聪明方法?(如应用函数)您可以使用
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
Data$Res您可以使用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
Data$Res或使用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
或使用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
谢谢你,伙计!它帮了我+1-我想发布这个,但是如果你不键入FUN
你会得到一个错误,我一辈子都无法找出为什么这个对我不起作用。。。直到你把它贴出来。由于对变量进行分组的…
,我想谢谢你,伙计!它帮了我+1-我想发布这个,但是如果你不键入FUN
你会得到一个错误,我一辈子都无法找出为什么这个对我不起作用。。。直到你把它贴出来。由于我猜分组变量的…
,我注意到您从未接受过答案。您可能希望阅读网站的和部分,以帮助您充分利用SO。如果一个答案确实解决了你的问题,你可能想要考虑一下投票和/或标记它被接受来显示问题已经被答案,通过在适当的答案旁边划上绿色的小复选标记。你没有义务这么做,但这有助于保持网站上没有未回答的问题,并奖励那些花时间解决你问题的人。嗨,我注意到你从未接受过答案。您可能希望阅读网站的和部分,以帮助您充分利用SO。如果一个答案确实解决了你的问题,你可能想要考虑一下投票和/或标记它被接受来显示问题已经被答案,通过在适当的答案旁边划上绿色的小复选标记。你没有义务这么做,但这有助于保持网站上没有未回答的问题,并奖励那些花时间解决你问题的人。