使用dplyr按组汇总异常:各分组年龄均值一致问题排查
分组计算年龄均值异常的问题分析与解决
问题根源
你在group_by()和summarize()里用了df$Q10、df$Q11_1_TEXT这种带数据框前缀的写法,这会直接调用整个原始数据框的列数据,完全绕过了dplyr的分组上下文。所以不管怎么分组,mean(df$Q11_1_TEXT, na.rm = TRUE)算的都是全表年龄均值,和当前分组无关。
而count = n()能正常统计每组数量,是因为n()是dplyr的专属聚合函数,会自动识别分组,统计每组的行数。
修正代码
直接用列名(去掉df$前缀),dplyr会自动在分组范围内处理对应子集的数据:
# df$q10: what is your gender by_gender <- df %>% group_by(Q10) %>% dplyr::summarize( count = n(), AvgAge = mean(Q11_1_TEXT, na.rm = TRUE) ) by_gender
额外说明
- 保留NA行:这个写法不会删除任何观测行。
group_by(Q10)会把性别列的NA值自动归为一个独立分组,n()会统计该组的行数,mean()里的na.rm = TRUE只会忽略每组内年龄列的NA值,完全不影响其他行的保留。 - 避免类似错误:在dplyr的管道操作(
%>%)里,所有列引用都不需要加原始数据框前缀,直接写列名即可,这样才能让dplyr正确识别分组上下文。
内容的提问来源于stack exchange,提问作者AirIcarus
相关产品推荐
相关产品推荐

