R语言中如何将单年份数据集按十年年代分组统计观测总数
R语言按十年年代分组统计实现方法
处理tibble格式的年度数据做十年维度聚合,用dplyr分组聚合是最简便的方案,逻辑和代码如下:
- 核心分组逻辑:对存储单年份的
decade字段做整除10后乘10的运算,即可得到每个年份对应十年区间的起始值(比如1931、1939做该运算都得到1930),起始值加9即为区间结束值,拼接后就能得到1930-1939这类年代标签 - 按生成的年代标签分组后,对每组的
n字段求和即可得到结果 - 注:你给出的期望输出样例中
decade字段标注为<dbl>数值型属于笔误,1930-1939这类区间值实际为字符型。
dplyr实现(推荐,适配tibble数据结构)
library(dplyr) # 替换yearly_data为你的原始数据集名称即可 decade_sum <- yearly_data %>% group_by(decade = paste0(decade %/% 10 * 10, "-", decade %/% 10 * 10 + 9)) %>% summarise(n = sum(n), .groups = "drop")
运行后输出的tibble结构和你预期完全一致,每行对应一个十年区间的观测总数。
基础R实现(无需加载第三方包)
如果不想依赖tidyverse生态,用基础R的聚合函数也能实现相同效果:
# 生成年代分组标签 decade_start <- yearly_data$decade %/% 10 * 10 decade_label <- paste0(decade_start, "-", decade_start + 9) # 分组求和 decade_sum <- aggregate(n ~ decade_label, data = yearly_data, FUN = sum) # 重命名字段匹配预期格式 names(decade_sum) <- c("decade", "n")
两种实现的分组逻辑完全一致,都会自动识别1930-1939、1940-1949直到数据覆盖的最后一个十年区间,不需要手动指定分组边界。
内容的提问来源于stack exchange,提问作者Juls
相关产品推荐
相关产品推荐

