R使用dplyr分组统计体重均值时不同性别组结果相同如何解决
异常原因
- dplyr管道语法使用错误:通过
%>%将数据框传入下游函数后,group_by()、summarise()会默认在传入的数据框的环境中检索字段,不需要额外加df$前缀。你在代码中写的df$gender、mean(df$weight)会直接提取整个df的全量列进行计算,不会根据分组筛选对应子集,因此两个分组得到的都是全局体重均值,结果完全相同。 - 代码存在不规范风险:
attach(Kid.weights)写法容易引发命名冲突,且数据集名拼写错误(原数据集名称为小写开头的kid.weights,此处写为大写开头的Kid.weights),虽然此处未触发报错,但会提升后续代码的出错概率。
修正方案
你需要移除管道函数内的df$前缀,同时可以直接通过dplyr的字段操作完成单位转换和分组统计,不需要先做子集裁剪,也不需要使用attach(),完整可运行代码如下:
library("UsingR") library("dplyr") data("kid.weights") # 取前6行数据+分组统计,若需要统计全量数据集,删除[1:6,]即可 df <- kid.weights[1:6,] %>% mutate(Kg = weight * 0.453592, M = height * 0.0254) %>% group_by(gender) %>% summarise( kg_mean = mean(Kg), kg_median = median(Kg) ) # 查看分组统计结果 df
运行后即可得到不同性别分组对应的千克体重的均值、中位数,不会再出现两个分组结果一致的问题。
内容的提问来源于stack exchange,提问作者Min
相关产品推荐
相关产品推荐

