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

R语言gtsummary实现连续变量为列并按多分类变量分层汇总

R语言gtsummary转置汇总表实现方案

实现以连续变量为列、分类变量水平为行的汇总表,核心是先通过数据长宽转换,将原本的多个连续变量转为分组因子,再传入tbl_summary的by参数即可。

首先加载所需依赖包:

library(gtsummary)
library(tidyverse)

基础实现代码

单分类变量生成符合要求的汇总表(以score_1为例)

tbl1 <- test2 %>%
  # 保留目标分类变量和所有待汇总连续变量
  select(score_1, land, water, fire) %>%
  # 长格式转换:将连续变量堆叠为分组字段
  pivot_longer(cols = -score_1, names_to = "continuous_var", values_to = "value") %>%
  # 按连续变量分组汇总,生成的表列对应连续变量,行对应score_1的分类水平
  tbl_summary(
    by = continuous_var,
    statistic = all_continuous() ~ "{mean} ({sd})"
  ) %>%
  # 自定义第一列表头
  modify_header(label = "**score_1等级**") %>%
  # 统一添加脚注说明统计量含义
  modify_footnote(all_stat_cols() ~ "均值(标准差)")

生成的tbl1列对应land、water、fire三个连续变量,行对应low、medium、high三个分类水平,符合需求。

多分类变量生成表后合并

# 生成score_2对应汇总表
tbl2 <- test2 %>%
  select(score_2, land, water, fire) %>%
  pivot_longer(cols = -score_2, names_to = "continuous_var", values_to = "value") %>%
  tbl_summary(
    by = continuous_var,
    statistic = all_continuous() ~ "{mean} ({sd})"
  ) %>%
  modify_header(label = "**score_2等级**") %>%
  modify_footnote(all_stat_cols() ~ "均值(标准差)")

# 生成score_3对应汇总表
tbl3 <- test2 %>%
  select(score_3, land, water, fire) %>%
  pivot_longer(cols = -score_3, names_to = "continuous_var", values_to = "value") %>%
  tbl_summary(
    by = continuous_var,
    statistic = all_continuous() ~ "{mean} ({sd})"
  ) %>%
  modify_header(label = "**score_3等级**") %>%
  modify_footnote(all_stat_cols() ~ "均值(标准差)")

# 用tbl_stack合并三张表
final_table <- tbl_stack(list(tbl1, tbl2, tbl3))
# 查看最终结果
final_table

简化批量实现方案

避免重复写代码,可通过循环批量生成三张表后合并:

# 批量生成三张汇总表
table_list <- purrr::map(c("score_1", "score_2", "score_3"), function(col) {
  test2 %>%
    select(all_of(c(col, "land", "water", "fire"))) %>%
    rename(score_level = all_of(col)) %>%
    pivot_longer(cols = -score_level, names_to = "continuous_var", values_to = "value") %>%
    tbl_summary(
      by = continuous_var,
      statistic = all_continuous() ~ "{mean} ({sd})"
    ) %>%
    modify_header(label = paste0("**", col, "等级**")) %>%
    modify_footnote(all_stat_cols() ~ "均值(标准差)")
})

# 合并得到最终表
final_table <- tbl_stack(table_list)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 02:18:03