R中如何用aggregate按眼睛颜色分组计算名字含数字角色的身高均值
错误原因
你的代码出错的核心是基础R的aggregate函数与dplyr管道%>%的参数传递逻辑不匹配:%>%会默认将左侧的处理结果作为右侧函数的第一个入参,但aggregate的第一个入参需要是分组公式,第二个才是用来计算的数据集,直接拼接管道会出现参数错位,无法得到正确结果。此外如果数据集里存在身高缺失值,不加忽略缺失的参数也会导致均值结果返回NA。
修正方案
方案1:调整aggregate参数适配管道
用.占位符指定管道传入的数据集对应aggregate的data参数即可,额外加na.rm = TRUE忽略缺失身高的记录:
sw %>% filter(grepl('[0-9]', name)) %>% aggregate(height ~ eye_color, data = ., FUN = mean, na.rm = TRUE) %>% setNames(c("Eye color", "Mean"))
方案2:全用dplyr语法实现(更推荐,逻辑更统一)
不需要混用基础R的aggregate函数,直接用dplyr自带的分组汇总函数完成需求:
sw %>% filter(grepl('[0-9]', name)) %>% group_by(eye_color) %>% summarise(Mean = mean(height, na.rm = TRUE)) %>% rename(`Eye color` = eye_color)
如果不需要忽略身高缺失的记录,删掉参数里的na.rm = TRUE即可。
内容的提问来源于stack exchange,提问作者Frontmaniaac
相关产品推荐
相关产品推荐

