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

如何设置gtsummary中Overall列的百分比为按列计算?

解决方案:修改gtsummary表格中Overall列的百分比计算方式

要实现分组列保持行百分比、Overall列使用列百分比的需求,无需合并表格,可通过modify_table_body()直接修改表格的底层数据,重新计算Overall列的百分比。以下是具体步骤和代码:

1. 生成原表格

首先按需求创建初始表格,设置by=species和percent="row",并添加Overall列:

library(gtsummary)
library(palmerpenguins)
library(dplyr)
library(stringr)

# 生成初始表格
tbl <- penguins %>%
  tbl_summary(
    by = species,
    percent = "row",
    include = c(island, sex)  # 示例选择分类变量,可根据需求调整
  ) %>%
  add_overall(last = TRUE)

2. 修改Overall列为列百分比

通过modify_table_body()提取每个分类类别的样本数,结合总样本量重新计算列百分比,替换原Overall列的行百分比:

# 获取总样本量(从表格元数据中提取,确保与表格统计一致)
total_n <- tbl$meta_data$df_n[1]

# 更新Overall列的百分比计算
tbl_updated <- tbl %>%
  modify_table_body(
    ~ .x %>%
      rowwise() %>%
      mutate(
        stat_0 = case_when(
          # 仅针对分类变量的百分比行进行修改
          variable %in% c("island", "sex") & str_detect(stat_0, "%") ~ {
            # 提取当前行的样本数n
            n_val <- as.numeric(str_extract(stat_0, "^\\d+(?=/)"))
            # 计算列百分比并格式化
            col_pct <- sprintf("%.1f", n_val / total_n * 100)
            # 重新构造统计字符串(n/总n (百分比%))
            paste0(n_val, "/", total_n, " (", col_pct, "%)")
          },
          # 其他行保持原内容不变
          TRUE ~ stat_0
        )
      ) %>%
      ungroup()
  )

# 查看最终表格
tbl_updated

原理说明

  • modify_table_body()允许直接操作gtsummary表格的底层数据框,其中stat_0对应Overall列的统计内容。
  • 通过正则表达式提取原字符串中的样本数n,结合总样本量计算列百分比,替换原行百分比的格式。
  • 仅针对分类变量的百分比行修改,不影响连续变量或其他统计内容。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 17:23:10