gtsummary::tbl_svysummary实现性别-国家两层嵌套调查汇总表的方法咨询
嵌套分层调查汇总表高效实现方案
核心逻辑
无需逐国家筛选、手动拼接表格,直接使用gtsummary内置的tbl_strata()函数即可批量实现两层嵌套结构:第一层按Country拆分独立表格块,每个块内部嵌入Gender的次级分组行,可自动覆盖全部21个国家的计算,大幅降低重复操作成本。
可直接运行的复现代码
基于你已经构建完成的df_survey调查设计对象,直接运行以下代码即可生成符合要求的嵌套表:
library(gtsummary) library(survey) nested_result_table <- df_survey %>% # 外层批量按Country生成独立分层块,自动完成所有国家块的拼接 tbl_strata( strata = Country, .header = "**{strata}**", # 为每个国家块加醒目标题,区分不同国家 ~.x %>% tbl_svysummary( by = Result, percent = "row", include = Gender, # 将Gender作为行维度纳入,实现次级嵌套 label = list(Gender ~ "") ) %>% add_overall(last = TRUE, col_label = "**n(row)**") %>% modify_header( label = "", stat_by = "**{level}**" ) %>% bold_labels() %>% italicize_levels() %>% italicize_labels() )
常见适配调整
- 嵌套顺序自定义:如果需要调换两层嵌套的优先级,只需要修改
tbl_strata()的strata参数、以及内层tbl_svysummary()的include参数即可,比如将strata设为Gender、include设为Country,就可以实现“先按性别分块、块内部按国家拆分”的结构。 - 长表展示优化:21个国家生成的长表可以配合
as_gt()调用gt包的参数调整表格宽度、添加横向滚动条,避免内容拥挤:nested_result_table %>% as_gt() %>% gt::tab_options(table.width = 1200) # 按展示需求调整宽度 - 原有代码的问题修正:之前写的基础表格代码没有将Gender纳入
include参数,系统默认不会将Gender作为行维度展示,因此无法生成嵌套结构,上述代码已经补齐了这个配置。
内容的提问来源于stack exchange,提问作者Cristiano
相关产品推荐
相关产品推荐

