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

如何在R语言中生成SPSS样式的交叉表?

用R语言生成SPSS风格的多响应交叉表

你需要生成的交叉表以Q1为行,Gender和物品(Maths_Set、Note_Book等)为列层级,每个单元格同时显示计数与百分比。以下是基于你提供的数据集的实现方案:

数据集代码

Q1 <- c(5,5,4,1,5,4,3,3,5,2)
Gender <- c(2,2,2,1,2,2,1,2,1,2)
Maths_Set <- c(1,0,1,1,1,1,1,1,0,1)
Note_Book <- c(1,1,0,1,1,1,1,1,1,1)
School_Bag <- c(0,1,1,0,1,1,1,1,1,1)
Text_Book <- c(0,1,0,1,1,1,1,1,1,1)
Pen <- c(0,0,1,1,1,1,1,1,1,1)

df = data.frame(Q1,Gender,Maths_Set,Note_Book,School_Bag,Text_Book,Pen)
df$Q1 <- factor(df$Q1, levels= c(1,2,3,4,5), labels = c("Strongly Dislike", "Dislike", "Neither like or Dislike", "Like", "Strongly Like"))
df$Gender <- factor(df$Gender, levels = c(1,2), labels = c("Boy", "Girl"))

实现步骤

我们将使用tidyverse工具包处理数据格式,并用janitor生成符合要求的交叉表:

  1. 加载所需包
library(tidyverse)
library(janitor)
  1. 将多响应变量转换为长格式
    把宽格式的物品变量转为长格式,仅保留受访者拥有该物品的记录:
df_long <- df %>%
  pivot_longer(cols = c(Maths_Set, Note_Book, School_Bag, Text_Book, Pen),
               names_to = "Item",
               values_to = "Owns") %>%
  filter(Owns == 1)
  1. 生成SPSS风格的交叉表
    通过分层统计,将计数和百分比合并到同一单元格,并构建Gender+Item的列层级:
# 生成带计数和行百分比的分层交叉表
cross_table <- df_long %>%
  tabyl(Q1, Gender, Item) %>%
  adorn_percentages("row") %>%  # 基于行(Q1)计算百分比
  adorn_pct_formatting(digits = 1) %>%  # 百分比保留1位小数
  adorn_ns(position = "front") %>%  # 计数放在百分比前面
  adorn_title("combined")  # 合并列标题层级

# 查看结果
cross_table

结果说明

  • 行是Q1的各个类别,列分为两层:上层是Gender(Boy/Girl),下层是具体物品
  • 每个单元格内容为计数 百分比,百分比基于对应Q1分组的总受访者数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 08:50:19