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

如何让tbl_summary()以含缺失值的总样本量为分母计算百分比?

解决gtsummary::tbl_summary()中分类变量百分比以组总观测数(含缺失)为分母的问题

gtsummary的tbl_summary()目前没有内置参数直接让分类变量的百分比计算以组内总观测数(包含缺失值)为分母,但可以通过自定义统计量函数结合statistic参数实现,同时保留tbl_summary的自动变量识别、统计检验等核心功能,无需切换到tbl_custom_summary()。

具体实现步骤

  1. 定义自定义统计函数,计算基于组总观测数的百分比
# 自定义统计函数:返回"计数 (百分比)"格式,百分比以组内总观测数(含缺失)为分母
pct_total <- function(x, ...) {
  # 获取当前分组的总观测数(包含缺失值)
  group_total <- length(x)
  # 统计各非缺失水平的计数
  level_counts <- table(x, useNA = "no")
  # 计算百分比(保留整数精度)
  pct_values <- scales::percent(level_counts / group_total, accuracy = 1)
  # 拼接成目标格式
  paste0(level_counts, " (", pct_values, ")")
}
  1. 在tbl_summary()中调用该函数,同时保留缺失值显示和统计检验功能
library(gtsummary)
library(dplyr)

# 示例数据集
df <- tibble::tibble(
  group = rep(c("A", "B"), each = 66),
  outcome = c(
    rep("Yes", 6), rep("No", 18), rep(NA, 42),
    rep("Yes", 7), rep("No", 25), rep(NA, 34)
  )
)

# 生成符合需求的汇总表
df %>%
  tbl_summary(
    by = group,
    missing = "ifany",  # 将缺失值显示为"Unknown"
    # 指定所有分类变量使用自定义统计函数
    statistic = list(all_categorical() ~ "{pct_total(.)}")
  ) %>%
  add_p()  # 自动添加统计检验

输出效果

生成的表格中,分类变量的百分比将以组内总观测数为分母:

  • outcome = Yes:Group A为6 (9%)(6/66),Group B为7 (11%)(7/66)
  • outcome = No:Group A为18 (27%)(18/66),Group B为25 (38%)(25/66)
  • Unknown(缺失值):Group A为42 (64%)(42/66),Group B为34 (52%)(34/66)

补充说明

  • 若需要调整百分比精度,可修改scales::percent()的accuracy参数(如accuracy=0.1保留一位小数)
  • add_p()会自动对分类变量应用合适的统计检验(如卡方检验),若需将缺失值作为一个水平参与检验,可通过test参数调整:
add_p(test = list(all_categorical() ~ "chisq.test", args = list(na.action = na.pass)))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 08:48:19