You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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

关键细节

  1. 先移除了原代码里的无意义变量participantNum,不再需要它充当假表头
  2. 用slice()在指定位置插入新行(这里是DIS行之后),自定义表头文本
  3. 把插入行的统计列设为空字符串,避免显示多余内容
  4. 通过modify_table_styling()给表头行设置加粗、无缩进的样式,和下方的缩进变量形成区分

内容的提问来源于stack exchange,提问作者Hannah Maisano

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 18:46:15