オブジェクトが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
等...
ありがとう
dplyr
の方法:
_library(dplyr)
foo <- data.frame(id=c(1, 2, 3, 2, 2, 1, 2, 3))
foo <- foo %>% group_by(id) %>% mutate(count=row_number())
foo
# A tibble: 8 x 2
# Groups: id [3]
id count
<dbl> <int>
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
でグループ化されます。グループ化しない場合は、%>% ungroup()
を追加します。
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))
に置き換えることができます。
カウントを取得する方法は次のとおりです。
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
私が持っていたデータフレームが大きすぎて、受け入れられた答えがクラッシュし続けました。これは私のために働いた:
library(plyr)
df$ones <- 1
df <- ddply(df, .(id), transform, cumulative_count = cumsum(ones))
df$ones <- NULL
非数値配列を含む任意の配列の累積カウントを取得する関数:
cumcount <- function(x){
cumcount <- numeric(length(x))
names(cumcount) <- x
for(i in 1:length(x)){
cumcount[i] <- sum(x[1:i]==x[i])
}
return(cumcount)
}