R の 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 などが代表値として妥当かを考える必要があります。