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

如何用gtsummary包生成含连续与分类变量缺失值统计的表格

用gtsummary实现连续与分类变量的缺失值统计表格

解决方案思路

借助gtsummary的add_stat()自定义统计函数,为所有变量(含分类变量)添加缺失值数量及占比的统计行,全程无需依赖其他包。

示例代码

library(gtsummary)
library(dplyr)
library(glue)

# 构造带缺失值的示例数据集
set.seed(123)
df <- mtcars %>%
  mutate(
    # 为连续变量添加缺失值
    mpg = ifelse(runif(nrow(.)) < 0.1, NA, mpg),
    # 为分类变量添加缺失值并转为因子类型
    cyl = factor(cyl),
    cyl = ifelse(runif(nrow(.)) < 0.15, NA, cyl),
    am = factor(am, labels = c("自动", "手动")),
    am = ifelse(runif(nrow(.)) < 0.1, NA, am)
  )

# 自定义缺失值统计函数:返回缺失值数量(百分比)格式
missing_stats <- function(data, variable, ...) {
  n_missing <- sum(is.na(data[[variable]]))
  pct_missing <- scales::percent(n_missing / nrow(data), accuracy = 0.1)
  tibble(label = "缺失值", stat = glue("{n_missing} ({pct_missing})"))
}

# 生成「常规统计+缺失值」完整表格
tbl_full <- df %>%
  tbl_summary(
    type = list(all_continuous() ~ "continuous", all_categorical() ~ "categorical"),
    # 定义变量常规统计量(可按需调整)
    statistic = list(
      all_continuous() ~ "{median} ({p25}, {p75})",
      all_categorical() ~ "{n} ({p}%)"
    ),
    missing = "no" # 关闭默认缺失值显示,后续手动添加统一格式的统计行
  ) %>%
  # 为所有变量添加缺失值统计行,放在常规统计下方
  add_stat(fns = everything() ~ missing_stats, location = "bottom") %>%
  # 调整表格表头和标题
  modify_header(label = "**变量**", stat_0 = "**统计结果**") %>%
  modify_caption("连续与分类变量统计及缺失值情况")

# 生成仅展示缺失值的简化表格(可选)
tbl_only_missing <- df %>%
  tbl_summary(
    type = list(all_continuous() ~ "continuous", all_categorical() ~ "categorical"),
    statistic = everything() ~ missing_stats,
    missing = "no"
  ) %>%
  modify_header(label = "**变量**", stat_0 = "**缺失值(百分比)**") %>%
  modify_caption("变量缺失值统计")

关键说明

  1. missing_stats函数按gtsummary要求的格式返回缺失值统计结果,兼容所有变量类型
  2. add_stat()实现将缺失值统计行批量添加到每个变量的统计模块中
  3. 可根据需求选择保留变量常规描述统计,或仅展示缺失值数据

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 07:02:13