2012-04-05 154 views
17

有沒有一種方法可以計算一個對象在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 

等等

感謝

回答

21

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

7

這是一種方式來獲得的計數:

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

2

我的數據幀太大,接受的答案不斷崩潰。這爲我工作:

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