如何在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生成符合要求的交叉表:
- 加载所需包
library(tidyverse) library(janitor)
- 将多响应变量转换为长格式
把宽格式的物品变量转为长格式,仅保留受访者拥有该物品的记录:
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)
- 生成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
相关产品推荐
相关产品推荐

