R中的累计计数

问题描述:

有没有一种方法可以计算一个对象在R中累计出现的次数?R中的累计计数

例如说我有柱:

id 
1 
2 
3 
2 
2 
1 
2 
3 

这将成为:

id count 
1  1 
2  1 
3  1 
2  2 
2  3 
1  2 
2  4 
3  2 

等等

感谢

ave函数按组计算函数。

> id <- c(1,2,3,2,2,1,2,3) 
> data.frame(id,count=ave(id==id, id, FUN=cumsum)) 
    id count 
1 1  1 
2 2  1 
3 3  1 
4 2  2 
5 2  3 
6 1  2 
7 2  4 
8 3  2 

我用id==id创建所有TRUE值,传递给cumsum时得到转换为数字的向量。您可以用rep(1,length(id))代替id==id

这是一种方式来获得的计数:

id <- c(1,2,3,2,2,1,2,3) 

sapply(1:length(id),function(i)sum(id[i]==id[1:i])) 

哪给你的:

[1] 1 1 1 2 3 2 4 2 
+1

@ user1165199:如果这个问题的最佳答案,请单击复选标记。 – 2012-04-05 19:15:07

+0

这是王牌。将它捆绑成一个data.table对象也很简单。 – DaveRGP 2016-01-25 16:28:11

我的数据帧太大,接受的答案不断崩溃。这为我工作:

library(plyr) 
df$ones <- 1 
df <- ddply(df, .(id), transform, cumulative_count = cumsum(ones)) 
df$ones <- NULL