32

各値が表示される回数の累積カウンターを作成したいと考えています。

たとえば、次の列があるとします。

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  

等...

ありがとう

4

6 に答える 6

34

関数は、グループごとに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。に置き換えることができid==idますrep(1,length(id))

于 2012-04-05T13:24:27.430 に答える
3

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

library(plyr)
df$ones <- 1
df <- ddply(df, .(id), transform, cumulative_count = cumsum(ones))
df$ones <- NULL 
于 2017-01-06T21:07:45.983 に答える