1

A と BEg という 2 つの異なる変数が原因で、ID のインスタンス数をカウントする必要がある長い形式のかなり大きなデータセットがあります。A または B のいずれかにより、同じ人物を複数の行で表すことができます。必要なものやるべきことは、ID のインスタンスの数をカウントすることですが、それほど難しくはありませんが、A と B による ID の数もカウントし、これらをデータセット内の変数として返します。

よろしく、

//ミ

4

3 に答える 3

3

ddply()パッケージの関数をplyr使用すると、識別子変数によってデータを分割し、各チャンクで関数を実行してから、すべてをまとめて組み立てることができます。したがって、データを識別子とA / Bステータスで分類し、(を使用してnrow())これらの組み合わせがそれぞれ発生する回数を数え、それらの数をうまくまとめる必要があります。

wkmor1の使用df

library(plyr)

x <- ddply(.data = df, .var = c("ID", "GRP"), .fun = nrow)

これは次を返します:

  ID GRP V1
1  1   a  2
2  1   b  2
3  2   a  2
4  2   b  2

次に、それを元のデータにマージします。

merge(x, df, by = c("ID", "GRP"))
于 2010-05-11T22:44:09.207 に答える
3

OK、私が見た解釈を考えると、最も速くて簡単な解決策は...

df$IDCount <- ave(df$ID, df$group, FUN = length)
于 2010-05-11T22:48:31.443 に答える
1

これは、「テーブル」を使用して基準を満たす行をカウントし、「マージ」を使用して頻度をデータフレームに追加する1つのアプローチです。

> df<-data.frame(ID=rep(c(1,2),4),GRP=rep(c("a","a","b","b"),2))
> id.frq <- as.data.frame(table(df$ID))
> colnames(id.frq) <- c('ID','ID.FREQ')
> df <- merge(df,id.frq)
> grp.frq <- as.data.frame(table(df$ID,df$GRP))
> colnames(grp.frq) <- c('ID','GRP','GRP.FREQ')
> df <- merge(df,grp.frq)
> df
  ID GRP ID.FREQ GRP.FREQ
1  1   a       4        2
2  1   a       4        2
3  1   b       4        2
4  1   b       4        2
5  2   a       4        2
6  2   a       4        2
7  2   b       4        2
8  2   b       4        2
于 2010-05-11T22:37:45.903 に答える