如何在gtsummary的tbl_summary中按常数修改单元格n值?
解决方案
方法1:自定义统计函数(推荐)
直接在tbl_summary()的statistic参数中传入自定义函数,对频数n进行缩放,同时保留原百分比计算结果。
示例代码(以将n除以10为例):
library(gtsummary) library(glue) library(purrr) # 自定义统计函数,scale为缩放系数(除以10设为0.1,乘以2设为2) scale_n_stat <- function(x, scale = 0.1) { # 计算每个类别的频数和原始百分比 cat_table <- table(x, useNA = "no") pct <- prop.table(cat_table) * 100 # 格式化输出:缩放后的n + 原百分比 purrr::imap_chr(cat_table, ~ glue("{.x * scale} ({sprintf('%.1f', .y)}%)")) } # 生成表格时指定使用自定义函数 trial %>% select(trt, response) %>% tbl_summary( type = all_categorical() ~ "categorical", statistic = all_categorical() ~ scale_n_stat(scale = 0.1) )
该方法在统计计算阶段直接处理n值,逻辑清晰且可复用,无需后续修改表格内容。
方法2:修改表格底层数据
如果已经生成tbl_summary对象,可通过modify_table_body()直接调整统计结果列:
library(gtsummary) library(stringr) # 先生成原始表格 tbl <- trial %>% select(trt, response) %>% tbl_summary() # 修改stat列中的n值(示例为除以10) tbl_modified <- tbl %>% modify_table_body( ~ .x %>% mutate( stat = str_replace( stat, "^(\\d+)", # 匹配开头的整数n值 function(m) as.numeric(m) * 0.1 # 应用缩放系数 ) ) ) tbl_modified
这种方法适合快速调整已生成的表格,若n值包含小数,需调整正则表达式的匹配规则。
注:两种方法都可根据需求调整缩放系数,百分比始终保留基于原始数据的计算结果。
内容的提问来源于stack exchange,提问作者EML
相关产品推荐
相关产品推荐

