如何用tbl_summary()构建带子分类的REDCap诊断统计表?
解决方案
1. 数据预处理(解决空白单元格统计问题)
先清理分支逻辑产生的无效空白值,将不属于当前诊断类别的细分诊断空白转为NA,避免被错误纳入统计:
library(dplyr) library(gtsummary) # 假设数据集名为redcap_data,包含diagnosis_category(诊断类别)和sub_diagnosis(细分诊断)列 clean_data <- redcap_data %>% # 将空白字符串转换为NA mutate(sub_diagnosis = na_if(sub_diagnosis, "")) %>% # 可选:仅保留有有效诊断信息的行 filter(!is.na(diagnosis_category) & !is.na(sub_diagnosis))
2. 生成分层汇总表(实现子分类展示)
使用tbl_strata()按诊断类别分层,每层内展示对应细分诊断的统计,完美实现「类别-子分类」的层级汇总:
clean_data %>% tbl_strata( strata = diagnosis_category, .tbl_fun = function(data) { data %>% select(sub_diagnosis) %>% tbl_summary( missing = "no", # 不展示NA的统计项 label = list(sub_diagnosis ~ "细分诊断") ) }, .header = "**诊断类别: {strata}**" # 自定义分层标题格式 ) %>% modify_spanning_header(c("stat_0") ~ "**统计结果**") # 统一列标题
3. 进阶处理(多列存储细分诊断的场景)
如果REDCap数据按诊断类别拆分了细分诊断列(如sub_diagnosis_A、sub_diagnosis_B),先转长格式再处理:
# 宽格式转长格式,整合细分诊断列 long_data <- redcap_data %>% pivot_longer( cols = starts_with("sub_diagnosis_"), # 匹配所有细分诊断列 names_to = "diagnosis_category", values_to = "sub_diagnosis", names_prefix = "sub_diagnosis_" # 提取诊断类别名称 ) %>% mutate(sub_diagnosis = na_if(sub_diagnosis, "")) %>% filter(!is.na(sub_diagnosis)) # 生成分层汇总表 long_data %>% tbl_strata( strata = diagnosis_category, .tbl_fun = function(data) { data %>% select(sub_diagnosis) %>% tbl_summary(missing = "no") } )
以上方案既排除了无效空白值的干扰,又能严格按诊断类别分层展示对应细分诊断的统计结果,完全匹配需求。
内容的提问来源于stack exchange,提问作者id_novice
相关产品推荐
相关产品推荐

