如何在gtsummary中实现条件逻辑?附当前与期望输出示例
如何在gtsummary中实现条件逻辑调整表格展示
问题背景
现有R代码生成的gtsummary统计表格包含空值类别,不符合期望效果,需通过条件逻辑调整,仅展示有实际数据的类别:
# 创建数据框 data <- data.frame( alive = c(1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1), reason = c("", "", "", "", "", "", "pneumonia", "stillbirth", "", "", "", ""), baby_ill = c(2, 2, 2, 1, 2, 1, 1, 1, 2, 2, 2, 1), episode = c("", "", "", 3, "", 4, 4, "", "", "", "", "") ) # 将字符列转为因子 data[] <- lapply(data, as.factor) # 生成gtsummary表格 tbl_summary(data) %>% add_n()
解决方案
步骤1:预处理数据
将空字符串替换为NA,转换为因子时自动移除空水平,避免空类别进入表格。
步骤2:生成定制化表格
结合gtsummary的函数实现条件过滤,确保仅展示有效类别。
修正后完整代码
# 创建数据框 data <- data.frame( alive = c(1, 1, 1, 1, 1, 1, 2, 2, 1, 1, 1, 1), reason = c("", "", "", "", "", "", "pneumonia", "stillbirth", "", "", "", ""), baby_ill = c(2, 2, 2, 1, 2, 1, 1, 1, 2, 2, 2, 1), episode = c("", "", "", 3, "", 4, 4, "", "", "", "", "") ) # 替换空字符串为NA并转为因子 data <- lapply(data, function(col) { col[col == ""] <- NA as.factor(col) }) %>% as.data.frame() # 生成表格并添加样本量 tbl_summary(data) %>% add_n() %>% # 可选:针对特定变量进一步过滤空行(若自动去重未生效时使用) modify_table_body( filter, !(variable %in% c("reason", "episode") & is.na(label)) )
关键说明
- 替换空字符串为
NA后,因子会自动排除无数据的水平,gtsummary默认不展示NA类别; modify_table_body可实现精细化行过滤,适用于需要针对特定变量定制展示规则的场景;- 若需按
alive等变量分组展示条件统计,可结合tbl_strata函数实现分层条件逻辑。
内容的提问来源于stack exchange,提问作者Ashu Sharma
相关产品推荐
相关产品推荐

