データフレームのサブセットごとに関数を適用

applyファミリーの関数(applyとかmapplyとか)を使えば,forを使わないで,ベクターやデータフレームの行や列の要素ごとに関数を適用できる.

では,データフレームにサブセットがあって,サブセットそれぞれの行や列の要素ごとに関数を適用したいときはどうするか?
そのときはaggregateを使う.
こんな感じ.

x <- data.frame(1:5, rep(2, 5), c("B", "A", "A", "B", "A"))
colnames(x) <- c("Apple", "Orange", "Class")
x

> x
Apple Orange Class
1 1 2 B
2 2 2 A
3 3 2 A
4 4 2 B
5 5 2 A
>

x.agg <- aggregate(x[ , 1:2], sum, by = list(x[ , 3])

> x.agg
Group.1 Apple Orange
1 A 10 6
2 B 5 4
>