by関数の出力
データフレームをグルーピングして、sum,max 〜by関数編では、by関数を使って、データフレーム内の特定のカラムをキーとしたグループでsumやmaxを算出した。これはこれでもいいんだけど、by関数の出力はグループ毎のリストになるので、場合によっては出力が使いずらい。
グルーピングのキーも行方向に持っていって、出力もデータフレームにするにはどうしたらいいだろうか。
aggregate関数
こんな場合はby関数ではなく、aggregate関数を使うと、具合がいい。さらにaggregate関数はデータフレームのカラム毎に関数を適用してくれるので、sumやmaxをそのまま使えばいい。
label <- c("A", "B", "C", "A", "B", "C") v1 <- c(1, 2, 3, 4, 5, 6) v2 <- c(100, 200, 300, 400, 500, 600) df <- data.frame(label, v1, v2) df label v1 v2 1 A 1 100 2 B 2 200 3 C 3 300 4 A 4 400 5 B 5 500 6 C 6 600 aggregate(df[,-1], list(df$label), max) Group.1 v1 v2 1 A 4 400 2 B 5 500 3 C 6 600 aggregate(df[,-1], list(df$label), sum) Group.1 v1 v2 1 A 5 500 2 B 7 700 3 C 9 900
カラム毎に関数を適用したい場合は、aggregate関数。カラム同士を関連させた関数を適用したい場合はby関数を使うってところだろうか。
0 件のコメント:
コメントを投稿