如何在gtsummary中创建多层Spanner表头(解决合并后子表头丢失问题)
分位数回归合并表多层表头实现方案
基于gt包的解决方案(推荐)
如果使用gt包制作表格,核心是先整理好合并后的数据集,再通过层级表头(tab_spanner的level参数)实现双层结构:
数据预处理
- 分别将AREA和PROP的分位数回归结果整理为宽格式,列名区分组别:比如AREA的列命名为
area_q10、area_q50、area_q90,PROP的列命名为prop_q10、prop_q50、prop_q90。 - 合并两个数据集,确保行(自变量)完全对齐。
- 分别将AREA和PROP的分位数回归结果整理为宽格式,列名区分组别:比如AREA的列命名为
构建多层表头
library(gt) # 假设合并后的数据集为combined_df final_table <- combined_df %>% gt() %>% # 先添加下层子表头(QR分位数) tab_spanner(label = "QR 10%", columns = c(area_q10, prop_q10)) %>% tab_spanner(label = "QR 50%", columns = c(area_q50, prop_q50)) %>% tab_spanner(label = "QR 90%", columns = c(area_q90, prop_q90)) %>% # 添加上层主表头(Area/Proportion),指定层级为1(高于子表头) tab_spanner( label = md("**Area**"), columns = starts_with("area_"), level = 1 ) %>% tab_spanner( label = md("**Proportion**"), columns = starts_with("prop_"), level = 1 ) %>% # 可选:加粗主表头增强区分度 tab_style( style = cell_text(weight = "bold"), locations = cells_column_spanners(spanner_level = 1) )
基于modelsummary包的解决方案
如果用modelsummary生成回归表,可通过分表生成再合并的方式实现:
library(modelsummary) # 分别定义AREA和PROP的分位数回归模型列表 area_qr_models <- list(qr10_area, qr50_area, qr90_area) prop_qr_models <- list(qr10_prop, qr50_prop, qr90_prop) # 生成带分子表头的分表(不添加外层主表头) tab_area <- modelsummary(area_qr_models, output = "gt", spanner = c("QR 10%", "QR 50%", "QR 90%")) tab_prop <- modelsummary(prop_qr_models, output = "gt", spanner = c("QR 10%", "QR 50%", "QR 90%")) # 合并表格并添加上层主表头 final_tab <- gt_merge_stack(tab_area, tab_prop) %>% tab_spanner( label = md("**Area**"), columns = 1:3, # 对应AREA的3个分位数列 level = 1 ) %>% tab_spanner( label = md("**Proportion**"), columns = 4:6, # 对应PROP的3个分位数列 level = 1 )
关键逻辑
不要提前给单个表格添加完整的spanner结构,而是先确保合并后的列按「组别-分位数」或「分位数-组别」的逻辑排列,再通过tab_spanner的level参数区分主、子表头层级,这样就能避免合并时子表头丢失,同时保证结构符合需求。
内容的提问来源于stack exchange,提问作者Hadar Klein
相关产品推荐
相关产品推荐

