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

如何在gtsummary::tbl_summary中区分两种缺失值类型

解决方案

方法1:拆分缺失类型为单独变量展示

先预处理数据,将两种缺失标识单独标记为分类变量,再结合tbl_summary实现分组统计:

# 加载依赖包
library(tidyverse)
library(gtsummary)

# 示例数据
df <- data.frame(type = c("A", "B", "A", "A", "B"), 
                 value = c("1", "2", "3", "NA", "Never Entered"))

# 数据预处理:转换数值列并标记缺失类型
df_processed <- df %>%
  mutate(
    # 转换为数值型(原缺失标识自动转为NA)
    value_num = as.numeric(value),
    # 标记每一行的缺失类型
    missing_category = case_when(
      value == "NA" ~ "Missing (NA)",
      value == "Never Entered" ~ "Missing (Never Entered)",
      TRUE ~ "Valid"
    )
  )

# 生成分组汇总表
df_processed %>%
  tbl_summary(
    by = type, # 按type分组统计
    include = c(value_num, missing_category), # 包含数值列和缺失类型列
    type = list(value_num ~ "continuous"), # 指定数值列类型
    statistic = list(value_num ~ "{mean} ({sd})"), # 连续变量统计量可按需调整
    missing = "no" # 关闭数值列默认缺失统计,改用单独的缺失类型列展示
  ) %>%
  modify_header(
    label ~ "变量",
    stat_1 ~ "**A组**",
    stat_2 ~ "**B组**"
  ) %>%
  modify_footnote(
    all_stat_cols() ~ "n = 每组观测数"
  )

该方案会将有效数值的统计结果与两种缺失类型的数量/百分比分开展示,分组后能清晰看到:A组有1个Missing (NA)、0个Missing (Never Entered),B组有0个Missing (NA)、1个Missing (Never Entered)。


方法2:自定义统计量在同一变量行下展示两种缺失

如果希望在连续变量的统计模块内直接显示两种缺失的数量,可以用add_stat自定义统计函数:

# 加载依赖包
library(tidyverse)
library(gtsummary)

# 示例数据
df <- data.frame(type = c("A", "B", "A", "A", "B"), 
                 value = c("1", "2", "3", "NA", "Never Entered"))

# 定义统计函数:计算"NA"缺失的数量
count_missing_na <- function(x, ...) {
  sum(x == "NA", na.rm = TRUE)
}

# 定义统计函数:计算"Never Entered"缺失的数量
count_missing_ne <- function(x, ...) {
  sum(x == "Never Entered", na.rm = TRUE)
}

# 生成汇总表
df %>%
  tbl_summary(
    by = type,
    include = value,
    type = list(value ~ "continuous"), # 按连续变量处理value列
    statistic = list(value ~ "{mean} ({sd})"),
    missing = "no" # 关闭默认缺失统计
  ) %>%
  # 添加自定义缺失统计量
  add_stat(
    fns = list(count_missing_na, count_missing_ne),
    label = list(count_missing_na ~ "Missing (NA)", count_missing_ne ~ "Missing (Never Entered)")
  ) %>%
  modify_header(
    label ~ "变量",
    stat_1 ~ "**A组**",
    stat_2 ~ "**B组**"
  )

该方案会在value变量的统计行下方,新增两行分别展示两种缺失类型的分组数量,直接满足需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 10:40:37