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

如何在gtsummary中为表格同一行添加多个独立脚注

问题:在gtsummary分层汇总表中添加多个独立脚注

原始分层汇总表代码

以下代码用于生成按年份分层的汇总表:

library(tidyverse)
library(gtsummary)

set.seed(50)

dat <- data.frame(exposed = sample(c("Unexposed","Exposed"), 100, TRUE),
                  year = rep(c(1985,1986), each = 50),
                  Age = rnorm(100, 85, 1),
                  Transit = sample(c("Bus", "Train", "Walk", "Car"), 100, TRUE))

dat %>%
  tbl_strata(strata = year,
             ~ .x %>%
               tbl_summary(
                 by = exposed,
                 include = c(Age, Transit),
                 statistic = list(Age ~ "{mean} ± {sd}"),
                 digits = Age ~ 1,
                 label = Age ~ "Age, mean ± SD"
               )) %>%
  modify_header(all_stat_cols() ~ "**{level}**") %>%
  modify_footnote(update = everything() ~ NA)

遇到的问题

多次调用modify_table_styling添加脚注时,先前的脚注会被覆盖,最终仅保留最后一次添加的内容。例如以下代码执行后,Transit行仅显示"Footnote 3":

dat %>%
  tbl_strata(strata = year,
             ~ .x %>%
               tbl_summary(
                 by = exposed,
                 include = c(Age, Transit),
                 statistic = list(Age ~ "{mean} ± {sd}"),
                 digits = Age ~ 1,
                 label = Age ~ "Age, mean ± SD"
               )) %>%
  modify_header(all_stat_cols() ~ "**{level}**") %>%
  modify_table_styling(columns = label,
                       rows = variable == "Age",
                       footnote = "Footnote 1") %>%
  modify_table_styling(columns = label,
                       rows = label == "Transit",
                       footnote = "Footnote 2") %>%
  modify_table_styling(columns = label,
                       rows = label == "Transit",
                       footnote = "Footnote 3") %>%
  modify_footnote(update = everything() ~ NA)

解决方案

通过设置modify_table_styling的append = TRUE参数,实现脚注追加而非覆盖。修改后的代码如下:

dat %>%
  tbl_strata(strata = year,
             ~ .x %>%
               tbl_summary(
                 by = exposed,
                 include = c(Age, Transit),
                 statistic = list(Age ~ "{mean} ± {sd}"),
                 digits = Age ~ 1,
                 label = Age ~ "Age, mean ± SD"
               )) %>%
  modify_header(all_stat_cols() ~ "**{level}**") %>%
  # 给Age行添加脚注
  modify_table_styling(columns = label,
                       rows = variable == "Age",
                       footnote = "Footnote 1") %>%
  # 给Transit行追加第一个脚注
  modify_table_styling(columns = label,
                       rows = label == "Transit",
                       footnote = "Footnote 2",
                       append = TRUE) %>%
  # 给Transit行追加第二个脚注
  modify_table_styling(columns = label,
                       rows = label == "Transit",
                       footnote = "Footnote 3",
                       append = TRUE) %>%
  modify_footnote(update = everything() ~ NA)

原理说明

modify_table_styling默认append = FALSE,每次调用会替换目标行/列的已有样式(包括脚注);设置append = TRUE后,新的脚注会被添加到已有脚注的末尾,不会覆盖原有内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 14:50:21