如何在gtsummary表格中创建空白表头行?
在gtsummary中添加空白表头行优化表格布局
问题说明
你目前靠无意义变量充当假表头,之后还要用PPT手动调整表格布局,想直接在gtsummary里实现添加分组表头/空白分隔行,避免重复操作,之前尝试modify_table_body()没成功。
解决方案
核心是通过modify_table_body()手动插入自定义行,再用modify_table_styling()设置表头样式,完全替代之前的无意义变量+PPT调整流程。
修改后的完整代码
Demo_data <- nomed_data %>% dplyr::select( Total_DIS, # 移除没用的participantNum变量 Total_PA, Total_NA, PA_NA, PANA, CoMorbidity = Final_questions.question2, Gender = Consent.question10, Age = Consent.question11, group ) %>% mutate( # 重新设置因子水平 Gender = factor(Gender, levels = c(1, 2, 3), labels = c("Female", "Male", "Other")), CoMorbidity = factor(CoMorbidity, levels = c(1, 2), labels = c("Yes", "No")) ) library(gtsummary) theme_gtsummary_compact() # 生成基础统计表格 base_tbl <- Demo_data |> tbl_summary( by = group, type = all_continuous() ~ "continuous", statistic = all_continuous() ~ "{mean} ({sd})", label = list( Total_DIS = "DIS", Total_PA = "PA", Total_NA = "NA", PA_NA = "PA-NA", PANA = "PA+NA", CoMorbidity = "Differential Diagnoses", Gender = "Gender", Age = "Mean Age" ), digits = list(all_continuous() ~ c(2, 2)), missing = "ifany" ) |> add_overall() |> modify_header(label ~ "**Variable**") |> modify_caption("**Table 1. Participant Characteristics**") |> bold_labels() |> modify_column_indent( columns = label, rows = label %in% c("PA", "NA", "PA+NA", "PA-NA"), indent = 4L ) |> modify_table_styling( columns = label, rows = label %in% c("PA", "NA", "PA+NA", "PA-NA"), undo_text_format = c("bold") ) |> modify_table_styling( columns = label, rows = label == "Unknown", footnote = "Due to a technical glitch 92 people did not receive questions on age and gender" ) # 插入"Mood"表头行到DIS之后 final_tbl <- base_tbl |> modify_table_body( ~ .x %>% # 定位DIS行位置,插入新行 slice(c(1, which(label == "DIS") + 1, 2:nrow(.))) %>% # 给插入的行赋值:label显示表头文本,其他列留空 mutate( label = ifelse(row_number() == 2, "**Mood**", label), across(all_of(c("stat_1", "stat_2", "stat_overall")), ~ ifelse(row_number() == 2, "", .)) ) ) |> # 设置表头行样式:加粗、无缩进 modify_table_styling( columns = label, rows = label == "**Mood**", text_format = "bold", indent = 0L ) # 输出表格 final_tbl
关键细节
- 先移除了原代码里的无意义变量
participantNum,不再需要它充当假表头 - 用
slice()在指定位置插入新行(这里是DIS行之后),自定义表头文本 - 把插入行的统计列设为空字符串,避免显示多余内容
- 通过
modify_table_styling()给表头行设置加粗、无缩进的样式,和下方的缩进变量形成区分
内容的提问来源于stack exchange,提问作者Hannah Maisano
相关产品推荐
相关产品推荐

