R 使い方 集計に便利な関数 aggregate
バイオインフォ道場、くまぞうです。
データフレームを使って集計を行う場合に、使いやすい関数があります。aggregate
関数です。データフレームの計算にはapply
系の関数がよく使われますが、わかりづらいという方にはオススメの方法です。
関連記事
R 使い方 欠損値 NA データフレームのNAを探す方法
R 使い方 欠損値 NA 除去方法
R 関数 maxの位置・minの位置を求める
R 使い方 データフレーム 累積和を求める
目次
aggregate関数の使い方
aggregate関数は、データフレームについて「指定した列をカテゴリで分けて集計する」というような計算を行うことができます。引数に、集計したい列(群)・識別したい条件(群)・関数を指定します。
単純構造
構造が単純な場合は、table
関数でも同様のことができます。
R> df <- data.frame(name = c("a","a","b","b","b","c","c","c","c")) name 1 a 2 a 3 b 4 b 5 b 6 c 7 c 8 c 9 c R> table(df) df a b c 2 3 4 R> aggregate(df, by=list(df$name), length) Group.1 name 1 a 2 2 b 3 3 c 4
カテゴリ毎に集計する
データフレームの列が多い場合はaggregate
関数を使ったほうが便利です。集計したい列(x)、カテゴリなどの分けたい条件(by)、計算に使いたい関数(FUN)を指定します。
R> df <- data.frame(name = c("a","a","b","b","b","c","c","c","c"), val1 = c(0, 1, 1, 2, 3, 5, 8, 13, 21), val2 = c(1, 2, 3, 4, 5, 6, 7, 8, 9)) R> df name val1 val2 1 a 0 1 2 a 1 2 3 b 1 3 4 b 2 4 5 b 3 5 6 c 5 6 7 c 8 7 8 c 13 8 9 c 21 9 R> aggregate(x=df[c("val1")], by=list(df$name), FUN=sum) # val1のみ集計 Group.1 val1 1 a 1 2 b 6 3 c 47 R> aggregate(x=df[c("val1","val2")], by=list(df$name), sum) # val1,2について Group.1 val1 val2 1 a 1 3 2 b 6 12 3 c 47 30
便利な使い方
集計したい列や、分けたい条件は複数指定することができます。
R> df <- data.frame(name = c("a","a","b","b","b","c","c","c","c"), type = c("A","A","A","A","B","B","B","B","B"), val1 = c(0, 1, 1, 2, 3, 5, 8, 13, 21), val2 = c(1, 2, 3, 4, 5, 6, 7, 8, 9)) R> df name type val1 val2 1 a A 0 1 2 a A 1 2 3 b A 1 3 4 b A 2 4 5 b B 3 5 6 c B 5 6 7 c B 8 7 8 c B 13 8 9 c B 21 9 R> aggregate(x=df[c("val1","val2")], by=list(df$name,df$type), sum) # 複数条件 Group.1 Group.2 val1 val2 1 a A 1 3 2 b A 3 7 3 b B 3 5 4 c B 47 30 # データセット irisでSpecies毎にmaxを計算 R> iris Sepal.Length Sepal.Width Petal.Length Petal.Width Species 1 5.1 3.5 1.4 0.2 setosa 2 4.9 3.0 1.4 0.2 setosa 3 4.7 3.2 1.3 0.2 setosa 4 4.6 3.1 1.5 0.2 setosa 5 5.0 3.6 1.4 0.2 setosa ... R> aggregate(x=iris[-5], by=list(species=iris$Species), FUN=max) species Sepal.Length Sepal.Width Petal.Length Petal.Width 1 setosa 5.8 4.4 1.9 0.6 2 versicolor 7.0 3.4 5.1 1.8 3 virginica 7.9 3.8 6.9 2.5
よく使われるapply系関数
apply系関数を指定して集計した場合
apply
関数とtapply
関数を組み合わせて、同様の集計を行ってみました。
R> apply(iris[-5], 2, function(x){tapply(x, iris$Species, max)}) Sepal.Length Sepal.Width Petal.Length Petal.Width setosa 5.8 4.4 1.9 0.6 versicolor 7.0 3.4 5.1 1.8 virginica 7.9 3.8 6.9 2.5
関連記事
R 使い方 エラーバー グラフの描き方(tapply使用例)
R 使い方 ボックスプロット(box plot) グラフの描き方(tapply使用例)