如何移除tbl_hierarchical输出中overall_row行的百分比数值
如何移除tbl_hierarchical输出中overall_row行的百分比数值
嘿,我来帮你搞定这个需求!你想移除tbl_hierarchical输出里overall_row(也就是你设置的"Any Adverse Event"行)的百分比,只保留计数,这个可以通过gtsummary的表格自定义功能轻松实现。
首先先回顾下你的原代码逻辑,我们在这个基础上做修改就行:
library(cards) library(gtsummary) ADAE_subset <- cards::ADAE |> dplyr::filter( AESOC %in% unique(cards::ADAE$AESOC)[1:5], AETERM %in% unique(cards::ADAE$AETERM)[1:5] )
接下来是核心的表格生成+修改步骤,我们用modify_table_body函数来定位并修改overall_row的内容:
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") ) |> modify_table_body( function(data) { # 找到overall_row对应的行索引 overall_row_pos <- which(data$variable == "..ard_hierarchical_overall..") # 针对所有统计结果列,只提取括号前的数字部分 stat_cols <- grepl("^stat_", names(data)) data[overall_row_pos, stat_cols] <- lapply( data[overall_row_pos, stat_cols], function(cell_content) stringr::str_extract(cell_content, "^\\d+") ) data } )
代码解释:
modify_table_body是gtsummary中用来直接修改表格底层数据集的工具,非常适合这种精细化的格式调整。- 我们先通过
data$variable == "..ard_hierarchical_overall.."定位到你设置的"Any Adverse Event"行。 - 然后筛选出所有以
stat_开头的列(这些就是各个处理组的结果列,比如Placebo、Xanomeline High Dose对应的列),用stringr::str_extract提取内容开头的数字(也就是计数部分),替换掉原来带百分比的完整内容。
这样处理之后,你的表格就会变成你想要的样子:
- "Any Adverse Event"行只显示26、42、40
- 其他行的百分比会正常保留,完全符合你的预期~
内容来源于stack exchange
相关产品推荐
相关产品推荐

