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

如何在gtsummary的tbl_summary中拆分by分组的多统计量列?

用gtsummary拆分分组统计量为独立列

要实现分组后将不同统计量拆分为单独列,可通过tbl_summary结合modify_column_split实现,步骤如下:

  1. 指定多统计量:在tbl_summary的statistic参数中,为变量定义需要的所有统计量(如均值、中位数、最值等)。
  2. 拆分分组列:用modify_column_split将每个分组对应的统计列拆分为多个子列,分别对应不同统计量。
  3. 优化表头格式:通过modify_spanning_header设置跨列标题,让表格结构更清晰。

代码示例

library(tidyverse)
library(gtsummary)

# 生成带多统计量的汇总表并拆分列
mtcars %>%
  select(vs, mpg, disp) %>%
  tbl_summary(
    by = vs,
    # 为连续变量指定多个统计量
    statistic = all_continuous() ~ c("{mean}", "{median}", "{min}", "{max}"),
    # 设置变量显示标签
    label = list(mpg ~ "英里/加仑", disp ~ "发动机排量")
  ) %>%
  # 拆分每个分组的统计列,按统计量生成子列
  modify_column_split(
    columns = starts_with("stat_"),
    pattern = "(mean|median|min|max)",
    split_label = c("均值", "中位数", "最小值", "最大值")
  ) %>%
  # 设置跨列标题,整合同分组的统计量子列
  modify_spanning_header(
    stat_0_1:stat_0_4 ~ "**vs=0**",
    stat_1_1:stat_1_4 ~ "**vs=1**"
  ) %>%
  # 调整子列表头的显示格式
  modify_header(
    stat_0_1 ~ "均值", stat_0_2 ~ "中位数", stat_0_3 ~ "最小值", stat_0_4 ~ "最大值",
    stat_1_1 ~ "均值", stat_1_2 ~ "中位数", stat_1_3 ~ "最小值", stat_1_4 ~ "最大值"
  )

添加更多统计量(如标准误、四分位距)

如果需要添加标准误、四分位距这类自定义统计量,可结合add_stat扩展后再拆分:

mtcars %>%
  select(vs, mpg) %>%
  tbl_summary(
    by = vs,
    statistic = all_continuous() ~ c("{mean}", "{median}", "{p25} - {p75}"),
    label = mpg ~ "英里/加仑"
  ) %>%
  # 添加标准误统计量
  add_stat(
    fns = all_continuous() ~ function(x) sprintf("%.2f", sd(x)/sqrt(length(x))),
    location = "statistic"
  ) %>%
  # 拆分列并设置表头
  modify_column_split(
    columns = starts_with("stat_"),
    split_label = c("均值", "中位数", "四分位距", "标准误")
  ) %>%
  modify_spanning_header(
    stat_0_1:stat_0_4 ~ "**vs=0**",
    stat_1_1:stat_1_4 ~ "**vs=1**"
  )

内容的提问来源于stack exchange,提问作者purpleblade98

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 02:23:22