gtsummary表格方向调整:将长表转为响应为列、问题为行的形式
用gtsummary实现响应为列、问题为行的统计表格
要把6分制量表的问题转为行、响应选项转为列的紧凑表格,按以下步骤操作:
- 预处理变量:先把所有量表问题转成因子,确保响应选项(1-6)的顺序固定,避免表格列乱序。
- 生成自定义统计表格:通过
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
相关产品推荐
相关产品推荐

