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

基于两列值对DataFrame行求和的R语言技术问题

按年份和物种汇总公吨数的dplyr解决方案

问题描述

需要对DataFrame按Year(年份)和Species.Name(物种名称)分组,忽略Division(分区)列,汇总Metric.Tonnes(公吨数)的总和。

原始数据

YearDivisionSpecies.NameMetric.Tonnes
19601ACod300
19601BCod200
19601APrawn50
19601BPrawn100
19611ACod300
19611BCod200
19611APrawn50
19611BPrawn100

期望输出

YearSpecies.NameMetric.Tonnes
1960Cod500
1960Prawn150
1961Cod500
1961Prawn150

尝试的错误代码

df %>% group_by(Year,Species.Name) %>% dplyr::summarise(across(Metric.Tonnes),sum)

解决方案

错误原因

代码中across的语法使用错误,across的正确格式是across(目标列, 应用函数),你将求和函数sum放在了across括号之外,导致语法不合法。

正确写法

方法1:修正across的用法

df %>% 
  group_by(Year, Species.Name) %>% 
  dplyr::summarise(across(Metric.Tonnes, sum), .groups = "drop")

方法2:直接对单列求和(更简洁)

因为仅需对Metric.Tonnes一列求和,不需要使用across,直接调用sum函数更直观:

df %>% 
  group_by(Year, Species.Name) %>% 
  dplyr::summarise(Metric.Tonnes = sum(Metric.Tonnes), .groups = "drop")

补充说明

  • .groups = "drop"参数用于取消分组状态,将结果转换为普通DataFrame,避免后续操作受分组影响;若不需要可以省略,但推荐添加。
  • 两种方法都能生成你需要的汇总表格,方法2在单列汇总场景下更易读。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 08:55:20