次のデータフレームがあります
x <- read.table(text = "  id1 id2 val1 val2
1   a   x    1    9
2   a   x    2    4
3   a   y    3    5
4   a   y    4    9
5   b   x    1    7
6   b   y    4    4
7   b   x    3    9
8   b   y    2    8", header = TRUE)
id1とid2でグループ化されたval1とval2の平均を計算し、同時に各id1-id2の組み合わせの行数を数えたい。各計算を個別に実行できます。
# calculate mean
aggregate(. ~ id1 + id2, data = x, FUN = mean)
# count rows
aggregate(. ~ id1 + id2, data = x, FUN = length)
1回の呼び出しで両方の計算を行うために、
do.call("rbind", aggregate(. ~ id1 + id2, data = x, FUN = function(x) data.frame(m = mean(x), n = length(x))))
ただし、警告とともに出力が文字化けします。
#     m   n
# id1 1   2
# id2 1   1
#     1.5 2
#     2   2
#     3.5 2
#     3   2
#     6.5 2
#     8   2
#     7   2
#     6   2
# Warning message:
#   In rbind(id1 = c(1L, 2L, 1L, 2L), id2 = c(1L, 1L, 2L, 2L), val1 = list( :
#   number of columns of result is not a multiple of vector length (arg 1)
plyrパッケージを使用することもできますが、データセットが非常に大きく、データセットのサイズが大きくなると、plyrが非常に遅くなり(ほとんど使用できなくなります)。
aggregateまたは他の関数を使用して、1回の呼び出しで複数の計算を実行するにはどうすればよいですか?
aggregateもあるの回答に記載byしてtapply。