RStudio新手求助:生成含多横幅的多重响应交叉表
实现多横幅多重响应交叉表的RStudio方案
嘿,作为RStudio新手,要生成你想要的这种多横幅多重响应交叉表其实挺简单的,我推荐用gtsummary或者janitor这两个包,它们对这类表格的支持非常友好,下面给你分步讲解:
1. 准备工作:安装并加载包
首先咱们得把需要的包装上,gtsummary用来生成美观的可导出表格,tidyverse用来处理数据格式:
install.packages(c("gtsummary", "tidyverse")) library(gtsummary) library(tidyverse)
如果想用更轻量化的文本表格,也可以用janitor包:
install.packages("janitor") library(janitor)
2. 整理多重响应数据
你的Q19_1、Q19_2这类变量是0/1编码的(1表示选择了该选项),首先咱们把它们转成长格式,方便后续统计:
# 假设你的原始数据框名叫df df_long <- df %>% # 把所有Q19开头的变量转成列:question是问题名,response是是否选择 pivot_longer(cols = starts_with("Q19_"), names_to = "question", values_to = "response") %>% filter(response == 1) # 只保留有选择的记录(0是未选择,不需要统计)
3. 用gtsummary生成美观的多横幅表格
这个包能直接生成带跨表头的多横幅表格,完全贴合你的需求:
cross_table <- df_long %>% tbl_summary( by = c(gender, age_group), # 设置多横幅分组:先按gender,再按age_group include = question, # 只统计问题变量 statistic = all_categorical() ~ "{n}" # 显示每个分组的频数 ) %>% # 自定义表头文本 modify_header(label ~ "**问题**") %>% # 添加跨分组的总表头 modify_spanning_header(c(gender, age_group) ~ "**分组**") %>% # 可选:把表格转成markdown格式(方便复制到文档) as_gt() %>% gt::as_raw_html() # 如果需要HTML格式,或者用as_flex_table()导出Word
生成的表格会自动把gender的male/female和age_group的1-4作为多层列标题,行是每个Q19问题,对应单元格是该分组下选择该选项的人数。
4. 用janitor生成简洁文本表格
如果你想要更轻量化的文本格式表格,tabyl函数可以快速实现:
df_long %>% group_by(question) %>% tabyl(gender, age_group) %>% adorn_title("combined") # 合并分组标题
这个输出会是类似你示例里的文本表格,行是问题,列是gender和age_group的交叉组合。
小提示
- 如果你的Q19变量是代表不同的选项(比如Q19_1是"选项1",Q19_2是"选项2"),可以给question列重命名,让表格更易读:
df_long <- df_long %>% mutate(question = case_when( question == "Q19_1" ~ "选项1", question == "Q19_2" ~ "选项2", question == "Q19_3" ~ "选项3", TRUE ~ question ))
内容的提问来源于stack exchange,提问作者EibwenVBA
相关产品推荐
相关产品推荐

