R の aggregate 関数で 「群ごとの平均値を求める」 または、「ダブりのある測定値を平均値で代表させる」

Julia でもありますが、R の aggregate 関数を使うと、「群ごとの平均値を求める」 または、「ダブりのある測定値を平均値で代表させる」 などが、簡単にできます。後者は、「 重複した 'row.names' は許されません 」 などというエラーへの対応として aggregate を使える可能性があるという意味でもあります。

おなじみの iris を例にとりましょう。iris の Species すなわち setosa, versicolor, virginica の3種について、それぞれの4測定値 Sepal.Length, Sepal.Width ,Petal.Length, Petal.Width の平均を求めます。

これは、考え方を変えると、複数回測定したダブりのあるデータを、平均値で代表させる方法として、利用することも可能です。ちなみに iris では、50 回の反復測定がされています。

なかなか、面倒に思えますが、R の aggregate 関数を使うとすぐです。すなわち

aggregate(iris[,1:4],by=list(iris[,5]),FUN=mean)
で、以下のような結果がでます。

Group.1 Sepal.Length Sepal.Width Petal.Length Petal.Width
1     setosa        5.006       3.428        1.462       0.246
2 versicolor        5.936       2.770        4.260       1.326
3  virginica        6.588       2.974        5.552       2.026

別法としては、1つずつ

sapply(split(iris[,1],iris[,5]), mean)
としていけば求まります。

aggregate 関数の FUN を、median, sd などとしても、機能します。

実は、data.frame を、ベクトル化したい時、例えば、クラスタリングやヒートマップなどを作製したい時に、aggregate 関数を使うと便利です。mean などが代表値として妥当かを考える必要があります。

B! LINE