2012-04-05 21 views
17

オブジェクトが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 

等...ここ

おかげ

答えて

21

ave関数は、関数をグループで計算します。私はcumsumに渡されたときに数値に変換しますすべてのTRUE値のベクトルを作成するためにid==idを使用

> 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==idrep(1,length(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:これはあなたの質問に最もよく答えたら、チェックマークをクリックしてください。 –

+0

これはエースです。これをdata.tableオブジェクトに束縛することも簡単です。 – DaveRGP

2

私が持っていたデータフレームは大きすぎて、受け入れられた回答がクラッシュし続けました。これは私のために働いた:

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