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

如何用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 20:45:02