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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 14:47:40