可以在`R`聚合模式下使用`ave()`将变量列表中的一个变量作为分组元素

问题描述 投票:0回答:1

此帖子似乎相关,但该示例仅考虑一个分组变量 (

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()
可以立即这样做吗?

r aggregate average
1个回答
0
投票

您可以添加更多分组变量。

> 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
© www.soinside.com 2019 - 2024. All rights reserved.