dplyr group_by失效:无法按供应商统计总收益求助
问题排查与解决方案
以下是针对代码无法按供应商分组求和的排查步骤和修正建议:
验证分组列的有效性
先确认amended_supplier_name列确实存在多个不同的供应商值:# 查看唯一供应商名称 unique(ealing_spend$amended_supplier_name) # 查看各供应商的行数分布 table(ealing_spend$amended_supplier_name)如果上述结果显示只有一个供应商值,那分组求和自然会返回总金额——这说明你的数据本身没有多供应商的分组依据。
检查列名与数据类型
确认amended_supplier_name和net_amount的列名拼写完全正确(注意大小写、下划线、特殊字符),可以通过colnames(ealing_spend)查看所有列名。同时确保amended_supplier_name是字符/因子类型,net_amount是数值类型:str(ealing_spend[, c("amended_supplier_name", "net_amount")])修正代码细节
- 显式处理NA值:如果
net_amount包含NA,sum()会返回NA,可能导致结果异常,建议添加na.rm = TRUE:
ealing_spend %>% group_by(`amended_supplier_name`) %>% summarise(total_earnings = sum(`net_amount`, na.rm = TRUE)) %>% arrange(desc(total_earnings))- 清理字符串隐形字符:若供应商名称存在前后空格、隐形符号,会导致看似相同的名称被分为不同组,可先清理字符串:
library(stringr) ealing_spend %>% mutate(amended_supplier_name = str_trim(amended_supplier_name)) %>% group_by(amended_supplier_name) %>% summarise(total_earnings = sum(`net_amount`, na.rm = TRUE)) %>% arrange(desc(total_earnings))- 尝试用
reframe替代summarise(适用于dplyr 1.0.0及以上版本),避免旧版本分组逻辑的潜在问题:
ealing_spend %>% group_by(`amended_supplier_name`) %>% reframe(total_earnings = sum(`net_amount`, na.rm = TRUE)) %>% arrange(desc(total_earnings))- 显式处理NA值:如果
确认dplyr环境
确保已加载dplyr包(library(dplyr)),且版本为最新稳定版。旧版本dplyr的分组逻辑可能存在bug,可通过packageVersion("dplyr")查看版本,必要时更新:install.packages("dplyr")
内容的提问来源于stack exchange,提问作者Nata
相关产品推荐
相关产品推荐

