[R] データフレームをグルーピングして、sum,max 〜aggregate編

2018年5月1日火曜日

R

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関数を使うってところだろうか。