次のようなRのデータフレームがあります。実際、私の実際の「df」データフレームは、ここにあるものよりもはるかに大きいですが、誰も混乱させたくないので、可能な限り単純化しようとしています。
これがデータフレームです。
id <-c(1,1,1,1,1,1,1,1,1,1,2,2,2,2,2,2,2,2,2,2,3,3,3,3,3,3,3,3,3,3)
a <-c(3,1,3,3,1,3,3,3,3,1,3,2,1,2,1,3,3,2,1,1,1,3,1,3,3,3,2,1,1,3)
b <-c(3,2,1,1,1,1,1,1,1,1,1,2,1,3,2,1,1,1,2,1,3,1,2,2,1,3,3,2,3,2)
c <-c(1,3,2,3,2,1,2,3,3,2,2,3,1,2,3,3,3,1,1,2,3,3,1,2,2,3,2,2,3,2)
d <-c(3,3,3,1,3,2,2,1,2,3,2,2,2,1,3,1,2,2,3,2,3,2,3,2,1,1,1,1,1,2)
e <-c(2,3,1,2,1,2,3,3,1,1,2,1,1,3,3,2,1,1,3,3,2,2,3,3,3,2,3,2,1,3)
df <-data.frame(id,a,b,c,d,e)
df
基本的に私がやりたいことは、各列(a、b、c、d、e)および各IDグループ(1、2、3)の数字の出現を取得することです(この後者のグループ化については、私の列「id」を参照してください')。
したがって、列 'a' と ID 番号 '1' (後者については列 'id' を参照) の場合、コードは次のようになります。
as.numeric(table(df[1:10,2]))
##The results are:
[1] 3 7
私の結果を簡単に説明すると、列 'a' (および列 'id' に番号 '1' を持つレコードのみ) で、番号 '1' が 3 回発生し、番号 '3' が 7 回発生したと言えます。
繰り返しますが、別の例を示します。列 'a' および ID 番号 '2' の場合 (後者のグループ化については、列 'id' を再度参照してください):
as.numeric(table(df[11:20,2]))
##After running the codes the results are:
[1] 4 3 3
もう一度少し説明しましょう: 列 'a' で、列 'id' に番号 '2' を持つ観測のみに関して) 番号 '1' が 4 回発生し、番号 '2' が 3 回発生し、番号 '2' が 3 回発生したと言えます。 「3」が 3 回発生しました。
これが私がやりたいことです。カスタム定義されたサブセットごとに数値の出現を計算します (そして、これらの値をデータ フレームに収集します)。難しい作業ではないことはわかっていますが、問題は、入力「df」データフレームを定期的に変更する必要があるため、行と列の総数が時間の経過とともに変化する可能性があることです...
これまでに行ったことは、次のように「df」データフレームを列で分離したことです。
for (z in (2:ncol(df))) assign(paste("df",z,sep="."),df[,z])
したがって、df.2 は df$a を参照し、df.3 は df$b に等しく、df.4 は df$c に等しくなります。しかし、私は今本当に立ち往生しており、先に進む方法がわかりません…</ p>
この問題を解決する適切な「自動的な」方法はありますか?