R语言使用aggregate函数按两列分组聚合的正确语法是什么
错误原因
你写法出错的核心是逻辑运算符使用错误:
- 你用的
|是逻辑“或”,对于任意一列来说,只要不是alpha或者不是beta就会被选中,最终所有列都会被纳入x参数的计算范围,甚至包含了你要分组的alpha、beta列,导致结果异常。 - 这里应该用逻辑“且”
&,筛选既不是alpha也不是beta的列作为计算对象。
正确写法1(修改你原有的索引写法)
aggregate(x = data[ , colnames(data) != "alpha" & colnames(data) != "beta"], by = list(alpha = data$alpha, beta = data$beta), FUN = sum)
注:给by里的列表元素命名可以让输出的分组列直接带上对应列名,不用后续手动修改
正确写法2(更简洁的公式语法,推荐)
aggregate支持公式接口,代码可读性更高:
aggregate(gamma ~ alpha + beta, data = data, FUN = sum)
如果你的数据集里有多个需要聚合的数值列,公式写法可以直接用. ~ alpha + beta,代表除了分组列之外的所有列都参与聚合计算。
运行输出结果
两种写法都会得到相同的正确聚合结果:
alpha beta gamma 1 1 1 0.3 2 1 2 0.5 3 2 3 0.5 4 2 4 0.8
内容的提问来源于stack exchange,提问作者Red Sleuth
相关产品推荐
相关产品推荐

