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

数据处理基础:如何在R中按国家汇总多行数据并求和

在R中按国家汇总求和的简便方法

嘿,我完全懂你遇到的问题——要把同一个国家的多行数据合并成一行求和结果,之前用group_by没得到预期效果对吧?别着急,这在R里有超实用的简便方法,大概率是你没把group_by和对应的聚合函数搭配好~

方法一:dplyr包(最直观易读,新手友好)

这应该是最常用的方案,先确保你安装并加载了dplyr:

install.packages("dplyr") # 首次使用需要安装
library(dplyr)

假设你的数据框叫df,包含country(国家列)和需要求和的数值列(比如revenue、expenses),正确的代码写法是:

# 按国家分组,对所有数值列自动求和(忽略缺失值)
summary_df <- df %>%
  group_by(country) %>%
  summarise(across(where(is.numeric), sum, na.rm = TRUE))

细节说明:

  • group_by(country):给数据按国家打上分组标记,这一步只是分组,不会改变数据行数
  • summarise(...):真正的聚合操作,这里用across(where(is.numeric), sum)表示对所有数值列执行求和;如果只想对特定列求和,直接指定列名更灵活:
# 仅对revenue和expenses列求和
summary_df <- df %>%
  group_by(country) %>%
  summarise(total_revenue = sum(revenue, na.rm = TRUE),
            total_expenses = sum(expenses, na.rm = TRUE))

方法二:data.table包(大数据场景更高效)

如果你的数据集特别大,data.table的运算速度会比dplyr更快,用法也很简洁:

install.packages("data.table")
library(data.table)

# 转换为data.table格式
dt <- as.data.table(df)

# 按国家分组,对所有数值列求和
summary_dt <- dt[, lapply(.SD, sum, na.rm = TRUE), by = country]

# 指定列求和的写法:
summary_dt <- dt[, .(total_revenue = sum(revenue), total_expenses = sum(expenses)), by = country]

为啥之前用group_by没效果?

大概率是只执行了group_by(country),但没有后续的summarise(或mutate,但求和用summarise)来聚合数据——group_by只是给数据分组,不会自动合并行,必须搭配聚合函数才能得到你要的单行汇总结果哦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 19:38:12