在R中使用mean()函数遇报错问题求助
问题原因与解决方法
你遇到的报错argument is not numeric or logical: returning NA,核心原因是管道符%>%会把左侧的整个数据框传递给右侧的mean()函数——而mean()默认只能处理数值/逻辑向量,没法直接对整个数据框计算均值,所以才会抛出错误。
你能运行的代码data %>% filter(Sex == "M") %>% summarise(mean(weight))之所以正常,是因为summarise()会自动从数据框中提取指定列(weight)生成向量,再传给mean()计算。
针对你那两段无法运行的代码,给出修正方案:
1. 修正data %>% filter(Sex == "M") %>% mean(weight)
有两种常用写法:
- 用
pull()提取weight列的向量后计算均值:data %>% filter(Sex == "M") %>% pull(weight) %>% mean() - 延续你熟悉的
summarise()写法(还能自定义结果列名):data %>% filter(Sex == "M") %>% summarise(mean_male_weight = mean(weight))
2. 修正data %>% mean(weight)
同理,两种可行方式:
- 提取列后计算:
data %>% pull(weight) %>% mean() - 用
summarise()统一处理:data %>% summarise(overall_mean_weight = mean(weight))
额外提示
如果weight列存在缺失值(NA),可以在mean()里添加na.rm = TRUE参数忽略缺失值,避免计算结果返回NA:
data %>% pull(weight) %>% mean(na.rm = TRUE)
内容的提问来源于stack exchange,提问作者fluffyk
相关产品推荐
相关产品推荐

