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

使用tbl_summary与tbl_strata生成多级表头列的问题排查

解决gtsummary表格的三个问题

1. 表头N计数因AVAL/CHG重复翻倍

问题根源是长格式数据中同一受试者对应多条记录(AVAL和CHG各一条),导致默认的N统计重复计数。直接用add_n()时指定唯一受试者计数即可:

library(gtsummary)

# 模拟长格式示例数据
df <- tibble(
  ID = rep(1:50, 2),
  param = rep(c("AVAL", "CHG"), each = 50),
  value = rnorm(100),
  group = sample(c("A", "B"), 100, replace = TRUE)
)

# 生成表格时用唯一ID计数替代默认N
tbl <- df %>%
  tbl_summary(
    by = group,
    include = c(param, value),
    statistic = list(value ~ "{mean} ({sd})")
  ) %>%
  add_n(statistic = "{n_unique}", location = "header") # 关键:用n_unique统计唯一受试者

这样表头的N会统计每个分组的唯一ID数,不会因重复记录翻倍。

2. 抑制CHG相关的基线警告

有两种实用方式:

  • 全局抑制gtsummary所有警告(适合长期使用该包的场景):
options(gtsummary.warn = FALSE)
  • 仅针对当前表格代码局部抑制(避免影响其他代码的警告提示):
tbl <- suppressWarnings(
  df %>%
    tbl_summary(...) %>%
    add_n(...)
)

如果是“CHG缺失基线”类警告,更严谨的做法是提前在数据中补全基线缺失值,从根源消除警告触发条件。

3. 将指定区域(紫色框选)设为空

如果紫色框是表格中特定行/列的单元格,modify_table_body()是直接高效的方案,无需绕路。假设框选的是基线行的CHG统计列,示例代码:

tbl <- tbl %>%
  modify_table_body(
    function(data) {
      # 定位目标单元格并设为空
      data <- data %>%
        mutate(
          label = case_when(
            variable == "基线" & statistic == "CHG" ~ "",
            TRUE ~ label
          ),
          stat_display = case_when(
            variable == "基线" & statistic == "CHG" ~ "",
            TRUE ~ stat_display
          )
        )
      data
    }
  )

如果是要隐藏整列,直接用modify_column_hide(columns = stat_2)(替换为目标列名)更简单;如果是特定单元格,modify_table_body就是最优方案,直接修改表格底层数据框,逻辑清晰易维护。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 10:03:13