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

gtsummary表格方向调整:将长表转为响应为列、问题为行的形式

用gtsummary实现响应为列、问题为行的统计表格

要把6分制量表的问题转为行、响应选项转为列的紧凑表格,按以下步骤操作:

  1. 预处理变量:先把所有量表问题转成因子,确保响应选项(1-6)的顺序固定,避免表格列乱序。
  2. 生成自定义统计表格:通过tbl_summary的参数配置,让每个响应选项作为独立列,显示对应问题的频数和百分比。

完整代码

library(gtsummary)
library(dplyr)

# 预处理:将Q21开头的变量转为因子,指定1-6为固定级别
df <- df %>%
  mutate(across(starts_with("Q21"), ~factor(., levels = 1:6)))

# 生成目标表格
df %>%
  select(starts_with("Q21")) %>% # 选择所有量表问题
  tbl_summary(
    type = all_categorical() ~ "categorical",
    statistic = all_categorical() ~ "{n} ({p}%)", # 每个响应列显示频数(百分比)
    # 可选:给每个问题设置自定义名称,替换成你实际的问题描述
    label = list(
      Q21_1 ~ "问题1",
      Q21_2 ~ "问题2",
      Q21_3 ~ "问题3",
      Q21_4 ~ "问题4",
      Q21_5 ~ "问题5"
    )
  ) %>%
  # 把响应选项(1-6)设为列标题
  modify_header(all_stat_cols() ~ "**{level}**") %>%
  # 去掉默认的"变量"列标题,替换为"问题"跨表头
  modify_header(label ~ "") %>%
  modify_spanning_header(label ~ "**问题**") %>%
  # 可选:调整表格宽度,让布局更美观
  as_gt() %>%
  gt::tab_options(table.width = "100%")

代码说明

  • mutate(across(...)):统一处理所有量表问题,转为因子类型并固定级别顺序,保证响应列按1-6排列。
  • statistic = ...:指定每个响应列显示的内容为「频数(百分比)」,这是让响应选项成为独立列的关键。
  • modify_header系列函数:调整表头样式,把响应级别设为列标题,问题列添加跨表头提升可读性。
  • as_gt():将gtsummary表格转为gt对象,方便进一步调整样式(比如宽度、颜色等)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 03:32:15