如何用gt_summary生成显示二分变量双表现的临床特征表?
用gt_summary生成二分变量"n1/n2"格式的临床特征表
问题背景
需要生成符合期刊要求的临床特征表,其中二分变量需在同一行显示两类的数量(格式如Sex (female/male): 10/8),但默认gt_summary设置无法直接实现该格式。
可行解决方案
方案1:将二分变量按分类变量处理后合并统计行
先将二分变量转为带标签的因子,确保类别顺序符合需求,再生成表格后合并同一变量的两行统计结果:
data("mtcars") library(gt_summary) # 转换二分变量为带标签的因子(示例:am为变速箱类型,vs为发动机类型) mtcars$am <- factor(mtcars$am, levels = c(0, 1), labels = c("Automatic", "Manual")) mtcars$vs <- factor(mtcars$vs, levels = c(0, 1), labels = c("V-engine", "Straight engine")) # 生成初始表格,分类变量单独显示每个类别的样本量 initial_tbl <- tbl_summary( mtcars, include = c(am, vs, mpg, disp), # 指定需展示的变量 statistic = list( all_continuous() ~ "{mean}±{sd}", all_categorical() ~ "{n}" ) ) # 合并同一变量的两行统计值为斜杠分隔格式 final_tbl <- initial_tbl %>% modify_table_body( ~ .x %>% group_by(variable) %>% mutate(stat_display = paste(stat_display, collapse = "/")) %>% slice(1) %>% # 保留合并后的单行 ungroup() ) %>% modify_header(label = "**临床特征**", stat_0 = "**统计结果**") # 输出表格 final_tbl
方案2:自定义统计函数直接返回"n1/n2"格式
针对二分变量编写自定义统计函数,直接计算并返回两类样本量的斜杠分隔字符串:
data("mtcars") library(gt_summary) # 自定义统计函数:计算二分变量两类的样本量并返回"n1/n2" dichotomous_n_pair <- function(x, ...) { # 将变量转为因子确保类别顺序固定 x_factor <- factor(x, levels = unique(x)) n1 <- sum(x_factor == levels(x_factor)[1], na.rm = TRUE) n2 <- sum(x_factor == levels(x_factor)[2], na.rm = TRUE) paste0(n1, "/", n2) } # 生成符合要求的表格 tbl_summary( mtcars, include = c(am, vs, mpg, disp), statistic = list( all_continuous() ~ "{mean}±{sd}", all_dichotomous() ~ "{dichotomous_n_pair}" # 调用自定义函数 ), # 显式指定变量类型为二分变量(避免误判) type = list(am ~ "dichotomous", vs ~ "dichotomous") )
注意事项
- 需提前将二分变量转为带标签的因子,确保类别顺序与期刊要求一致,避免样本量对应顺序出错;
- 若变量为数值型二分变量(如0/1),转换为因子时需设置清晰的类别标签,提升表格可读性。
内容的提问来源于stack exchange,提问作者c_dinosaur
相关产品推荐
相关产品推荐

