此帖子似乎相关,但该示例仅考虑一个分组变量 (
by
)。是否可以使用 ave()
在多个分组变量的基础上对多个变量进行平均?
按照同一POST中的示例:
df <- data.frame(A = rnorm(20), B = rnorm(20), site = gl(5,4), month = gl(2,10))
这似乎工作正常,仍然使用
mean
而不是ave
aggregate(cbind(A, B) ~ site + month, data = df, mean)
有没有更有效的方法?
ave()
可以立即这样做吗?
您可以添加更多分组变量。
> transform(df, mn=ave(cbind(A, B), site, month))
A B site month mn.A mn.B
1 -0.6104697 0.2524263 1 1 -0.03415871 -0.03415871
2 0.2880355 0.1897356 1 1 -0.03415871 -0.03415871
3 -0.5816155 1.2815789 1 1 -0.03415871 -0.03415871
4 1.3435948 -2.4365555 1 1 -0.03415871 -0.03415871
5 0.1750469 -0.5855076 2 1 -0.10553138 -0.10553138
6 0.4374662 0.0103783 2 1 -0.10553138 -0.10553138
7 -0.3405101 -0.8371708 2 1 -0.10553138 -0.10553138
8 0.6288837 -0.3328376 2 1 -0.10553138 -0.10553138
9 -1.6613419 -2.1050023 3 1 -0.72058797 -0.72058797
10 1.0453300 -0.1613377 3 1 -0.72058797 -0.72058797
11 0.5053064 -1.2946748 3 2 -0.13016572 -0.13016572
12 -1.9228812 2.1915868 3 2 -0.13016572 -0.13016572
13 -1.4860137 -0.3145034 4 2 -0.66294349 -0.66294349
14 -0.8653919 -0.3814499 4 2 -0.66294349 -0.66294349
15 0.1556521 -1.1469195 4 2 -0.66294349 -0.66294349
16 -0.9116240 -0.3532977 4 2 -0.66294349 -0.66294349
17 1.1310613 2.0196141 5 2 0.63761020 0.63761020
18 -0.6198639 0.8882268 5 2 0.63761020 0.63761020
19 0.3932094 -1.3104097 5 2 0.63761020 0.63761020
20 1.6947693 0.9042743 5 2 0.63761020 0.63761020
注意,这实际上是
ave(cbind(A, B), site, month, FUN=mean)
,即默认为 mean
。