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

生成数据框多列频数表:保留未出现的5分制评分选项

问题描述

我有一份问卷数据,受访者需对多个问题进行5分制评分,数据框构造代码如下:

Q5_1 <- c("completely agree", "agree a little", "completely agree", "completely agree")
Q5_2 <- c("agree a little", "do not agree or disagree", "agree a little", "completely agree")
Q5_3 <- c("do not agree or disagree","do not agree or disagree","do not agree or disagree","do not agree or disagree")
df <- data.frame(Q5_1, Q5_2, Q5_3)

我需要生成包含两列(Q5_1、Q5_3)的频数表,要求纳入所有5分制评分选项(包括从未被选择的选项),理想输出格式如下:

Q5_1        Q5_3
completely disagree           0           0
disagree a little             0           0
do not agree or disagree      0           4
agree a little                2           0
completely agree              2           0 

但我尝试用table(df$Q5_1, df$Q5_3)得到的是交叉表,且只显示了出现过的选项,不符合需求:

do not agree or disagree
agree a little           2
completely agree         2

我能手动构造类似理想格式的数据框,但统计测试需要标准的频数表格式。

解决方案

核心问题是原始的评分变量是字符型,table()函数只会统计实际出现过的取值。只需将变量转换为指定完整水平的因子,就能让所有5分制选项都被纳入统计:

  1. 定义完整的5分制评分选项:
full_responses <- c("completely disagree", "disagree a little", "do not agree or disagree", "agree a little", "completely agree")
  1. 将Q5_1和Q5_3转换为因子,指定levels为完整选项:
df$Q5_1 <- factor(df$Q5_1, levels = full_responses)
df$Q5_3 <- factor(df$Q5_3, levels = full_responses)
  1. 分别统计两个变量的频数并合并为目标格式:
# 统计各变量频数
freq_Q51 <- table(df$Q5_1)
freq_Q53 <- table(df$Q5_3)

# 合并为两列的频数表
result_table <- cbind(Q5_1 = as.numeric(freq_Q51), Q5_3 = as.numeric(freq_Q53))
# 设置行名为完整评分选项
rownames(result_table) <- full_responses

运行后result_table就是符合要求的频数表,输出如下:

Q5_1 Q5_3
completely disagree           0    0
disagree a little             0    0
do not agree or disagree      0    4
agree a little                2    0
completely agree              2    0

这个结果是标准的矩阵格式(属于R的频数表类型),可以直接用于后续统计测试。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 20:06:22