如何用gtsummary按行分组展示两个嵌套变量的汇总表?
使用gtsummary实现嵌套分组汇总表
示例数据集
df <- data.frame( classification = c("independant professions", "independant professions", "workers", "workers"), occupations = c("Lawyer", "Doctor", "Mason", "Painter") )
实现方案
完全可以通过gtsummary包实现目标嵌套分组汇总表,以下提供两种实用方法:
方法1:利用tbl_strata()构建分层嵌套表
这种方法通过按上层分类拆分数据,再合并结果生成嵌套结构,最贴近目标样式:
library(gtsummary) library(dplyr) df %>% tbl_strata( # 按上层分类分组 strata = classification, # 每个分组内生成职业的汇总表 .tbl_fun = ~.x %>% tbl_summary( include = occupations, statistic = everything() ~ "{n}", missing = "no" ) %>% modify_header(label = "职业"), # 设置分组标题格式 .header = "**{strata}**" ) %>% # 添加表头跨栏标题 modify_spanning_header(everything() ~ "分类与职业汇总") %>% # 转换为gt对象并设置分组为列内嵌套 as_gt() %>% gt::tab_options(row_group.as_column = TRUE)
方法2:手动修改表体构建层级结构
如果需要更灵活的自定义层级,可直接修改表体的行类型和缩进:
library(gtsummary) library(dplyr) df %>% tbl_summary( include = c(classification, occupations), statistic = everything() ~ "{n}", missing = "no" ) %>% modify_table_body( ~.x %>% mutate( # 定义行层级:分类为一级标签,职业为二级层级 row_type = case_when( variable == "classification" ~ "label", TRUE ~ "level" ), # 为职业行添加缩进 indent = variable == "occupations" ) ) %>% modify_header(label = "分类/职业")
说明
- 方法1生成的表格会将上层分类作为行组嵌套在列内,与目标示例的视觉结构完全一致。
- 方法2通过手动配置层级和缩进,适合需要调整层级样式的场景。
内容的提问来源于stack exchange,提问作者Tetro
相关产品推荐
相关产品推荐

