如何用R语言生成分类变量的多国家计数汇总表
解决方法:用tidyverse工具生成目标汇总表
直接用dplyr + tidyr的组合可以快速实现需求,步骤清晰且避免冗余NA值:
步骤1:加载依赖包
library(dplyr) library(tidyr)
步骤2:数据整理与计数
假设你要统计的变量是sex和educ,执行以下代码:
# 1. 将多变量转成长格式,统一处理 d_long <- d %>% pivot_longer(cols = c(sex, educ), # 指定需要统计的变量 names_to = "variable", # 新增列存储原变量名 values_to = "category") # 新增列存储变量类别 # 2. 按变量、类别、国家分组计数 count_data <- d_long %>% filter(!is.na(category)) %>% # 可选:过滤掉类别为NA的记录 group_by(variable, category, country) %>% summarise(count = n(), .groups = "drop") # 3. 转成目标宽格式:每行是类别,每列是国家计数 summary_table <- count_data %>% pivot_wider(names_from = country, # 把国家转成列名 values_from = count, # 对应列填充计数 values_fill = 0) # 无数据的位置填充0(避免NA冗余)
结果说明
最终的summary_table结构如下:
| variable | category | China | USA | ... |
|---|---|---|---|---|
| sex | Male | 120 | 85 | ... |
| sex | Female | 135 | 92 | ... |
| educ | Primary | 78 | 56 | ... |
| educ | High | 102 | 77 | ... |
如果需要把variable和category合并成一列(比如统一叫"类别"),可以再加一步:
summary_table <- summary_table %>% mutate(类别 = paste(variable, category, sep = ": ")) %>% select(类别, everything(), -variable, -category)
内容的提问来源于stack exchange,提问作者sanmath
相关产品推荐
相关产品推荐

