在R语言中按年份与公司分组计算均值的方法求助
解决R语言按年份和公司分组计算各列均值的问题
你的代码存在两个核心问题:
group_by("Year")中的引号是错误用法,分组时直接写列名即可,无需加引号;且你的需求是按年份和公司分组,需同时指定两个分组列(假设公司列名为Company,请根据实际列名调整)。colMeans是base R函数,无法直接配合dplyr的管道分组对象使用,需用dplyr包的汇总函数实现分组计算逻辑。
以下是两种可行的解决方案,均基于dplyr包:
方法一:使用across(dplyr 1.0.0+ 推荐用法)
library(dplyr) # 假设数据框DF包含Year、Company及需计算均值的数值列 DF %>% group_by(Year, Company) %>% summarise(across(where(is.numeric), mean, na.rm = TRUE), .groups = "drop")
across(where(is.numeric), mean, na.rm = TRUE):对所有数值型列计算均值,自动忽略NA值.groups = "drop":计算完成后取消分组,返回普通数据框;若需保留分组,可移除该参数或设置为"keep"
方法二:使用summarise_all(兼容旧版dplyr)
如果你的dplyr版本较低,可使用该写法:
DF %>% group_by(Year, Company) %>% summarise_all(mean, na.rm = TRUE)
若数据中存在非数值列(如Year、Company本身),可通过summarise_at指定具体计算列:
# 假设需计算均值的列是col1、col2、col3 DF %>% group_by(Year, Company) %>% summarise_at(vars(col1, col2, col3), mean, na.rm = TRUE)
补充说明
- 确保
Year和Company列的类型正确(比如Year为整数/字符,Company为字符/因子) - 若列名含特殊字符或与函数名冲突,需用反引号包裹,例如
group_by(Fiscal Year)
内容的提问来源于stack exchange,提问作者Li4991
相关产品推荐
相关产品推荐

