解决tbl_hierarchical合并零行对象后无法与tbl_summary堆叠的问题
解决方法
核心问题是tbl_merge生成的复合表格结构无法被tbl_stack识别,最简洁的处理方式是直接在原始数据中补全所有未入组原因的因子水平,让tbl_hierarchical自动显示零计数的行,无需依赖虚拟数据集和tbl_merge操作。
步骤1:预处理原始数据,补全因子水平
将ENTERCOM_f转换为包含所有需要展示的未入组原因的因子,确保即使某类原因没有数据,也会在表格中保留对应行:
# 定义所有需要展示的未入组原因水平 ENTERCOM_levels <- c("Adverse Event", "Screen Failure", "Lost to Follow-Up", "Withdraw by Subject", "Other") # 转换adsl中的ENTERCOM_f为因子,强制包含所有定义的水平 adsl <- adsl |> mutate(ENTERCOM_f = factor(ENTERCOM_f, levels = ENTERCOM_levels))
步骤2:重新生成未入组原因表格
直接使用预处理后的adsl生成tbl_hierarchical表格,无需虚拟数据集:
tbl_enrollfrs <- tbl_hierarchical( data = adsl, denominator = adsl, id = "USUBJID", by = "TRT01P", variables = "ENTERCOM_f", overall_row = TRUE, label = list("..ard_hierarchical_overall.." = "Not entered/randomised") ) |> add_overall(last = TRUE)|> modify_indent(columns = label, rows = row_type == "level", indent = 4L) |> modify_indent(columns = label, rows = variable == "ENTERCOM_f", indent = 8L) |> # 将零计数的单元格显示为"0" modify_missing_symbol(symbol = "0", columns = all_stat_cols())
步骤3:堆叠两个表格
此时tbl_enrollfrs是单一结构的表格对象,可以直接和tbl_enrolled用tbl_stack堆叠:
tbl <- tbl_stack(list(tbl_enrolled, tbl_enrollfrs))
替代方案(保留虚拟表思路)
如果必须使用虚拟数据集,可将复合结构的表格转换为gt对象后手动合并:
# 将两个表格都转换为gt对象 gt_enrolled <- as_gt(tbl_enrolled) gt_enrollfrs2 <- as_gt(tbl_enrollfrs2) # 手动合并两个gt表格 final_tbl <- gt_enrolled |> gt::tab_row_group(label = "") |> gt::tab_add_row_group(label = "") |> gt::tab_merge(gt_enrollfrs2)
内容的提问来源于stack exchange,提问作者xiecheng gu
相关产品推荐
相关产品推荐

