如何正确计算数据框分组均值?aggregate函数使用存疑
解决R语言aggregate函数计算分组均值的问题
我明白你遇到的问题啦——你用aggregate的时候出现警告,而且结果里包含了不必要的错误内容,这是因为你传入了整个数据框给aggregate,而它尝试对所有列(包括字符型的value列)应用mean函数,字符类型自然没法计算均值,所以才会弹出警告。
正确的实现方式
下面给你两种靠谱的aggregate用法,都能准确计算各组i列的均值:
方法1:公式式写法(推荐,更直观)
这种写法用公式i ~ value明确指定:按value列分组,计算i列的均值,代码如下:
values <- data.frame(value = c("a", "a", "a", "a", "a", "b", "b", "b", "c", "c", "c", "c"), i = c(1,2,3,4,5,6,7,8,9,10,11,12)) agg <- aggregate(i ~ value, data = values, FUN = mean) print(agg)
运行后会得到清晰的结果:
value i 1 a 3 2 b 7 3 c 10.5
方法2:指定聚合列与分组列的写法
如果你习惯用by参数,可以明确指定要聚合的是values$i列,同时给分组列命名(避免默认的Group.1列名):
agg <- aggregate(values$i, by = list(Group = values$value), FUN = mean) # 可以重命名列让结果更清晰 colnames(agg) <- c("value", "mean_i") print(agg)
为什么原来的代码会出错?
你原来的代码agg <- aggregate(values, by = list(values$value), FUN = mean)会遍历values的每一列:
- 对
i列(数值型):能正常计算均值 - 对
value列(字符型):mean函数无法处理字符,所以弹出警告,结果中该列会变成NA
这样既产生了警告,结果也不是你想要的纯净分组均值,所以才会觉得方法不正确。
内容的提问来源于stack exchange,提问作者Suhail Gupta
相关产品推荐
相关产品推荐

