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

如何转置gtsummary包中tbl_summary生成的分类变量汇总表?

解决gtsummary汇总表转置问题

步骤1:模拟目标数据

先生成符合场景的100人颜色偏好模拟数据:

library(tidyverse)
library(gtsummary)

# 固定随机种子保证结果可重复
set.seed(123)
df <- tibble(
  car = sample(c("red", "blue", "yellow"), 100, replace = TRUE),
  shirt = sample(c("red", "blue", "yellow"), 100, replace = TRUE),
  website = sample(c("red", "blue", "yellow"), 100, replace = TRUE)
)

步骤2:生成初始分类汇总表

用tbl_summary生成各项目的颜色分布百分比统计:

initial_tbl <- df %>%
  tbl_summary(
    type = everything() ~ "categorical",
    statistic = everything() ~ "{p}%",
    label = list(car = "汽车", shirt = "衬衫", website = "网站")
  )

步骤3:转置为目标格式

提供两种实现方式,按需选择:

方式1:转为数据框后重塑(适合后续数据分析)

# 将汇总表转为tidy数据框,再重塑为宽格式
transposed_df <- initial_tbl %>%
  as_tibble() %>%
  select(项目 = label, 颜色 = label_1, 百分比 = stat_0) %>%
  # 过滤掉无关行(如总计、未知值)
  filter(!颜色 %in% c("Total", "Unknown")) %>%
  pivot_wider(names_from = 颜色, values_from = 百分比)

方式2:保留gtsummary表格样式(适合报告输出)

transposed_tbl <- initial_tbl %>%
  modify_table_body(
    ~ .x %>%
      select(项目 = label, 颜色 = label_1, 百分比 = stat_0) %>%
      filter(!颜色 %in% c("Total", "Unknown")) %>%
      pivot_wider(names_from = 颜色, values_from = 百分比)
  ) %>%
  modify_header(
    项目 ~ "偏好项目",
    blue ~ "蓝色",
    red ~ "红色",
    yellow ~ "黄色"
  ) %>%
  modify_caption("各项目颜色偏好百分比分布")

关键说明

  • 如果初始汇总表包含Total或Unknown行,必须用filter过滤,否则转置后会出现多余列。
  • 方式1输出的是普通数据框,可直接用于后续计算;方式2保留了gtsummary的表格样式,支持进一步美化后导出为Word/HTML格式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 05:02:16