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

在R中按多分组合并汇总数据的高效实现方法

R中高效合并人口数据框的方法

直接用dplyr结合tidyr的分组聚合+格式转换就能一次性完成需求,完全不用手动拆分数据框,步骤如下:

核心思路

通过按地区(region)和类型(type)分组,直接对所有年份列求和,自动完成性别(gender)和年龄组的合并汇总;再通过格式转换将type转为独立列,得到目标样式。

完整代码示例

1. 加载依赖包

library(dplyr)
library(tidyr)

2. 模拟示例数据(可替换为你的真实数据)

set.seed(123)
df <- expand.grid(
  region = rep(c("city1", "city2", "city3"), each = 12), # 每个城市3个年龄组,每组4条记录
  age_group = rep(c("18-25", "26-40", "41-60"), each = 4, times = 3),
  gender = rep(c("male", "female"), each = 2, times = 9),
  type = rep(c("A", "B"), times = 18),
  year_2020 = sample(100:500, 36),
  year_2021 = sample(100:500, 36),
  year_2022 = sample(100:500, 36)
)

3. 数据合并与格式整理

# 第一步:分组汇总(合并性别、年龄组,保留type区分)
summary_df <- df %>%
  group_by(region, type) %>%
  summarise(across(starts_with("year_"), sum), .groups = "drop")

# 第二步:将type转为额外列,生成最终格式
final_df <- summary_df %>%
  pivot_wider(
    names_from = type,
    values_from = starts_with("year_"),
    names_sep = "_"
  )

代码说明

  • group_by(region, type):指定分组维度,确保同一地区、同一类型的所有数据(不同性别、年龄组)被归为一组
  • summarise(across(starts_with("year_"), sum)):对所有年份列批量求和,自动完成性别和年龄组的合并,无需手动筛选
  • pivot_wider:将type从行维度转换为列维度,生成如year_2020_A、year_2020_B的列,符合后续处理需求

这种方法的优势:

  • 完全避免手动拆分数据框的繁琐操作
  • 向量化运算效率高,大数据量下比循环/手动拆分快很多
  • 代码逻辑清晰,可读性强,便于后续修改维护

内容的提问来源于stack exchange,提问作者flâneur

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 20:15:44