如何在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
相关产品推荐
相关产品推荐

