按Official Number分组计算PENALTY列均值报错求助
问题分析与解决方案
报错原因
你的代码存在两个核心问题:
- 错误地将整个数据框传给
aggregate的第一个参数,导致函数尝试对所有列(包括非数值列)计算均值,非数值列无法被mean函数处理,进而触发'trim' must be numeric of length one错误。 by参数中错误包含了PENALTY列,这会让分组条件变成OFFICIAL_NUMBER + PENALTY的组合,完全偏离了“按每个Official Number计算PENALTY均值”的需求。
正确解决方案
方法1:使用aggregate的标准写法
直接指定要聚合的目标列和分组列,避免传入整个数据框:
STATS <- aggregate(PENALTY ~ OFFICIAL_NUMBER, data = UPDATED_PENALTY, FUN = mean)
- 公式
PENALTY ~ OFFICIAL_NUMBER明确表示:以OFFICIAL_NUMBER为分组依据,计算PENALTY的均值 data参数指定数据源,避免重复写数据框名
方法2:用dplyr管道实现(更符合你使用%>%的习惯)
如果已经加载了dplyr包,推荐用更直观的分组聚合写法:
library(dplyr) STATS <- UPDATED_PENALTY %>% group_by(OFFICIAL_NUMBER) %>% summarise(PENALTY_mean = mean(PENALTY, na.rm = TRUE))
group_by(OFFICIAL_NUMBER):按官员编号分组summarise(...):计算每组的PENALTY均值,na.rm = TRUE可以自动忽略缺失值,避免结果出现NA
内容的提问来源于stack exchange,提问作者avxeesh
相关产品推荐
相关产品推荐

