如何为tbl_hierarchical层级表添加全零行?(已实现全零列)
问题
我需要生成符合模板要求的层级不良事件(AE)表格,要求包含所有分组(包括全零行和全零列)。尝试通过给TRTA和AESOC添加不存在的因子水平来实现,结果成功生成了全零列,但全零行没有显示出来。
当前使用的代码如下:
library(gtsummary) ADAE_subset <- cards::ADAE |> dplyr::filter( AESOC %in% unique(cards::ADAE$AESOC)[1:5], AETERM %in% unique(cards::ADAE$AETERM)[1:5] ) |> dplyr::mutate(TRTA = factor(TRTA, levels = c(unique(TRTA), "TRT A"))) |> dplyr::mutate(AESOC = factor(AESOC, levels = c(unique(AESOC), "AESOC"))) # Example 1 - Event Rates -------------------- tbl_hierarchical( data = ADAE_subset, variables = c(AESOC, AETERM), by = TRTA, denominator = cards::ADSL |> mutate(TRTA = ARM), id = USUBJID, digits = everything() ~ list(p = 1), overall_row = TRUE, label = list(..ard_hierarchical_overall.. = "Any Adverse Event") )
当前输出
预期输出
解决方案
只给AESOC添加因子水平没用,因为tbl_hierarchical只会生成数据中实际存在的分组行。要得到全零行,得手动构造对应分组的空行并合并到原数据中,具体步骤如下:
- 从
ADSL中提取所有受试者ID,构造新增AESOC分组的空行(事件数为0) - 确保空行的列名、因子水平和原数据完全匹配
- 合并原数据和空行后再生成表格
修改后的代码:
library(gtsummary) library(dplyr) # 处理原数据,先给TRTA加因子水平 ADAE_subset <- cards::ADAE |> filter( AESOC %in% unique(cards::ADAE$AESOC)[1:5], AETERM %in% unique(cards::ADAE$AETERM)[1:5] ) |> mutate(TRTA = factor(TRTA, levels = c(unique(TRTA), "TRT A"))) # 构造新增AESOC的空行数据:给每个受试者都加一行该分组的空记录 empty_aesoc_data <- cards::ADSL |> mutate( # 匹配TRTA的因子水平 TRTA = factor(ARM, levels = levels(ADAE_subset$TRTA)), # 设置新增的AESOC因子水平 AESOC = factor("AESOC", levels = c(unique(ADAE_subset$AESOC), "AESOC")), AETERM = NA_character_, # 无具体事件术语,设为NA # 补充ADAE必需的其他列,用默认值填充 AESEQ = 0, AESPID = "", AESTDTC = NA_character_ ) |> select(all_of(names(ADAE_subset))) # 只保留原ADAE的列,避免列不匹配 # 合并原数据和空行数据 ADAE_full <- bind_rows(ADAE_subset, empty_aesoc_data) # 生成层级表格 tbl_hierarchical( data = ADAE_full, variables = c(AESOC, AETERM), by = TRTA, denominator = cards::ADSL |> mutate(TRTA = ARM), id = USUBJID, digits = everything() ~ list(p = 1), overall_row = TRUE, label = list(..ard_hierarchical_overall.. = "Any Adverse Event") )
关键说明
- 空行必须包含原ADAE数据的所有列,否则合并时会报错,可根据实际ADAE结构调整补充的列
- 新增的
AESOC分组在合并后的数据中存在(每个受试者都有一行空记录),tbl_hierarchical就会生成对应的行,且事件数为0 TRTA的全零列不需要额外构造空行,因为分母数据中没有"TRT A",表格会自动计算为0事件数
内容的提问来源于stack exchange,提问作者Huan Lu
相关产品推荐
相关产品推荐

