私の質問:集計データ
データ:
v1 <- c("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p")
v2 <- c("aa","bb","cc","dd","ee","ff","gg","hh","ii","jj","kk","ll","mm","nn","oo","pp")
v3 <- c("aaa","bbb","ccc","ddd","eee","fff","ggg","hhh","iii","jjj","kkk","lll","mmm","nnn","ooo","ppp")
values <- 1:10000
y <- data.frame(var1=sample(v1,size = 100,replace=T),
var2=sample(v2,size=100,replace=T),
var3=sample(v3,size=100,replace=T),
val1=sample(values,size=100,replace=T),
val2=sample(values,size=100,replace=T))
head(y)
var1 var2 var3 val1 val2
1 h hh lll 4832 9547
2 h nn eee 727 6382
3 h bb jjj 9985 8041
4 e bb jjj 1438 280
5 k ff nnn 3094 4316
6 f cc kkk 7426 3588
基本的に私はVAR1、VAR2、およびVAR3のすべてのユニークな組み合わせによりval1と和とval2する必要があります。したがって、上記のhead
文の行は一切集計されません。
私が扱っている実際のデータには、var1、var2、およびvar3には数千もの異なる値があります。さらに、グループ化したい列の数が変わります。これは、ユーザーが集計したい任意の数のグループを選択する光沢のあるアプリで使用されます。私はstats::aggregate
を使ってみましたが、これは十分に汎用性がないようです。
私の質問に答えるために何か必要があれば教えてください。
編集: これまでのところ非常に有益な回答であり、ありがとうございましたが、私が探しているものではありません。
の問題は、上記の例を集約することができるように私のスクリプトを自動化するだけでなく、以下の通りです:私のデータは、同じように簡単にこのようになります。光沢のあるアプリ、またはいずれか他のいくつかのバリエーションでは
head(y)
var1 var2 var3 var4 var5 val1 val2 val3
1 p pp nnn ll aaa 3914 6621 8968
2 d ii jjj pp aaa 5885 955 7560
3 j bb ppp aa ccc 7979 5602 4639
4 e mm ooo mm fff 8746 8612 2212
5 g ee aaa kk lll 4795 6438 6318
6 f mm kkk ii ggg 7550 90 1173
列の数。変数と値の列のインデックス値は知っていますが、名前はわかりません。だから私は、インデックス値を使用することができますが、彼らは変化しています。また、常に変化しているので、どの列でも本当に難しいコードはできません。
こちらがお役に立てば幸いです。
'aggregate(cbind(val1、val2)〜var1 + var2 + var3、data = y、sum、na.rm = TRUE)'はうまくいくはずです。 – mtoto
上記の例では、 'cbind(" val1 "= val1、" val2 "= val2)'を使って列名を設定することもできます。 – lmo