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

R语言中合并数据框指定行数据以构建人口年龄金字塔

解决方法

你可以通过重新归类年龄组,再按性别和新的年龄组聚合人口数的方式实现,无需手动选择行操作。以下提供两种常用方案:

方案一:使用 tidyverse 工具链(推荐)

利用 forcats 包的 fct_collapse 函数直接合并因子水平,再用 dplyr 聚合求和:

# 加载所需包
library(tidyverse)

# 合并指定年龄组并聚合
pop_pyramid_clean <- pop_pyramid %>%
  mutate(
    # 合并非标准年龄组到目标5年组
    Age_group_clean = fct_collapse(Age_group,
      "15" = c("15", "18"),
      "20" = c("20", "21", "22"),
      "60" = c("60", "62"),
      "65" = c("65", "67")
    )
  ) %>%
  group_by(Sex, Age_group_clean) %>%
  summarise(pop = sum(pop), .groups = "drop")

方案二:Base R 实现

无需额外包,通过创建映射关系完成归类后聚合:

# 创建年龄组映射:键为原组,值为目标组
age_map <- c("18" = "15", "21" = "20", "22" = "20", "62" = "60", "67" = "65")

# 生成新的年龄组列
pop_pyramid$Age_group_clean <- ifelse(
  as.character(pop_pyramid$Age_group) %in% names(age_map),
  age_map[as.character(pop_pyramid$Age_group)],
  as.character(pop_pyramid$Age_group)
)

# 按性别和新年龄组聚合求和
pop_pyramid_clean <- aggregate(pop ~ Sex + Age_group_clean, data = pop_pyramid, sum)

# 可选:将新年龄组转回因子类型
pop_pyramid_clean$Age_group_clean <- as.factor(pop_pyramid_clean$Age_group_clean)

说明

两种方案的核心逻辑一致:先将非标准年龄组重新归类到对应的5年组,再按性别和新组汇总人口数。这样既避免了手动操作行的繁琐,也能自动处理所有符合规则的分组,不会因因子类型导致错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 13:00:29