PAYATHON 2026

如何在 gtsummary 层级表中仅显示事件数而不显示百分比?

数据小陈

结论

可以在 tbl_ard_hierarchical() 的 statistic 格式中判断当前行是否包含 p。如果包含,就显示事件数和百分比;如果没有,则只显示事件数。这样,ard_event_count 使用 statistic = everything() ~ c("n", "N") 后,默认格式就不会因引用缺失的 p 而报错。

ard_event_count <- adae %>%
  mutate(event_flag = "Total Events") %>%
  ard_tabulate(
    data = .,
    variables = event_flag,
    by = "TRT01P",
    denominator = adsl,
    statistic = everything() ~ c("n", "N")
  ) %>%
  filter(variable_level == "Total Events")

创建层级表时,可以传入条件格式:

tbl <- tbl_ard_hierarchical(
  ard,
  variables = c(event_flag, AESOC, AEBODSYS, AESEV),
  by = "TRT01P",
  statistic = ~ '{ifelse(
    exists("p"),
    sprintf("%s (%s %%)", n, p),
    n
  )}'
) %>%
  modify_header(
    label = "",
    all_stat_cols() ~ "**{level}** \n**N = {n}**"
  ) %>%
  modify_footnote(everything() ~ NA)

原因

表格默认的统计格式会读取 p。将 ard_event_count 改为只生成 n 和 N 后,这部分 ARD 中不再包含 p,因此格式化表达式会报错。条件表达式会在 p 存在时显示 n (p%),否则只显示 n。在 sprintf() 的格式字符串中,%% 表示输出字面百分号。

列标题中的 N = {n} 用于显示组总人数;统计单元格是否显示百分比由另一项设置控制。tbl_ard_hierarchical() 的 statistic 参数决定统计单元格的呈现方式,可用字段应与传入的 ARD 中实际包含的统计量相匹配。更多用法见 gtsummary 层级表文档 和 对应问题的示例解答。

备注:内容仅供参考。