如何在R中按母亲年龄统计各年龄段子女数量?
需求说明
现有一份育龄及以上女性数据集,每条数据对应一位女性,包含id、母亲年龄AGE字段,以及parity1至parity4字段(分别代表该女性第1至第4胎孩子的年龄)。需按母亲年龄统计各年龄段子女的总数,生成汇总表格:
- 每行对应一个母亲年龄
- 每列对应一个子女年龄
- 单元格数值为对应母亲年龄下该年龄段子女的数量
示例表格如下:
| 母亲年龄 | 0 | 1 | 2 | 3 |
|---|---|---|---|---|
| 38 | 1 | |||
| 39 | ||||
| 40 | 1 | |||
| 41 | 1 | 1 | ||
| 42 | ||||
| 43 | 1 | 1 | 1 | |
| 44 | 1 | |||
| 45 | 1 | |||
| 46 | 1 | |||
| 47 | 1 |
示例数据集
library("tidyverse") sample_df <- tibble( id = c(1, 2, 3, 4, 5, 6, 7, 8, 9, 10), AGE = c(38, 39, 40, 41, 42, 43, 44, 45, 46, 47), parity1 = c(15, 14, 13, 12, 9, 8, 14, 13, 3, 7), parity2 = c(13, 9, 9, 10, 7, 4, 13, 11, NA, 5), parity3 = c(10, 7, 3, 3, 6, 2, 9, 15, NA, 2), parity4 = c( 0, NA, NA, 1, NA, 0, 0 , 1, NA, NA), )
R语言解决方案
使用tidyverse工具链实现需求,核心通过格式转换完成分组统计:
result <- sample_df %>% # 宽转长,合并所有子女年龄列 pivot_longer( cols = starts_with("parity"), names_to = "child_order", values_to = "child_age" ) %>% # 过滤无子女年龄的记录 filter(!is.na(child_age)) %>% # 按母亲年龄、子女年龄统计数量 count(AGE, child_age, name = "count") %>% # 长转宽,缺失值填充为空字符串 pivot_wider( names_from = child_age, values_from = count, values_fill = "" ) %>% # 重命名列匹配示例格式 rename(`母亲年龄` = AGE) %>% # 按母亲年龄排序 arrange(`母亲年龄`) # 输出结果 print(result)
结果说明
运行代码后生成的result数据框即为符合要求的汇总表格,空单元格表示对应母亲年龄下无该年龄段的子女。
内容的提问来源于stack exchange,提问作者Azam Mirzaei
相关产品推荐
相关产品推荐

