You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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")])
    
  • 修正代码细节

    1. 显式处理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))
    
    1. 清理字符串隐形字符:若供应商名称存在前后空格、隐形符号,会导致看似相同的名称被分为不同组,可先清理字符串:
    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))
    
    1. 尝试用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))
    
  • 确认dplyr环境
    确保已加载dplyr包(library(dplyr)),且版本为最新稳定版。旧版本dplyr的分组逻辑可能存在bug,可通过packageVersion("dplyr")查看版本,必要时更新:

    install.packages("dplyr")
    

内容的提问来源于stack exchange,提问作者Nata

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 13:33:33