如何在R中合并Tibbles以构建完整社会人口学统计表格?
在R中合并Tibbles生成社会人口学统计表格
解决思路
你需要先统一三个Tibble的列结构,给每个表格添加变量类型标识,再通过行合并得到完整的统计表格。
步骤1:清理单个Tibble
把每个统计结果的分类列重命名为统一名称,并新增一列标注变量类型(比如“教育程度”“婚姻状况”“职业”):
# 处理教育程度统计 a_clean <- a %>% rename(category = education) %>% mutate(variable = "教育程度") # 处理婚姻状况统计 b_clean <- b %>% rename(category = relationship) %>% mutate(variable = "婚姻状况") # 处理职业统计 c_clean <- c %>% rename(category = occupation) %>% mutate(variable = "职业")
步骤2:合并所有Tibble
用dplyr::bind_rows()实现行合并,同时调整列顺序让表格更符合统计逻辑:
final_table <- bind_rows(a_clean, b_clean, c_clean) %>% select(variable, category, n, `%`)
合并后的表格结构如下:
# A tibble: 10 x 4 variable category n `%` <chr> <chr> <int> <formttbl> 1 教育程度 elementary school 1 25.00% 2 教育程度 high school 2 50.00% 3 教育程度 university 1 25.00% 4 婚姻状况 divorced 1 25.00% 5 婚姻状况 married 1 25.00% 6 婚姻状况 single 2 50.00% 7 职业 doctor 1 25.00% 8 职业 student 1 25.00% 9 职业 teacher 1 25.00% 10 职业 unemployed 1 25.00%
进阶优化:批量处理(避免重复代码)
如果变量数量较多,用purrr包批量处理所有变量,不用逐个编写统计代码:
library(purrr) final_table <- df %>% imap_dfr(function(col, var_name) { # 过滤NA并统计频次 col %>% discard(is.na) %>% table() %>% as.data.frame(stringsAsFactors = FALSE) %>% # 重命名列 rename(category = ., n = Freq) %>% # 计算百分比并添加变量名 mutate( `%` = formattable::percent(n / sum(n)), variable = var_name ) }) %>% select(variable, category, n, `%`)
内容的提问来源于stack exchange,提问作者dplyr
相关产品推荐
相关产品推荐

