You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 22:07:26