如何解决从 R 中的李克特量表数据创建频率表
事实证明,一项看似简单的任务在 R 中确实很困难。我正在处理包含命题的调查数据,这些命题要求受访者在 7 点李克特量表上表明他们的同意或不同意程度。我正在尝试创建频率表(参见下面的表 1),以显示每个性别/年龄组类别的受访者在回答每个命题时选择非常同意、略微同意、同意、中立等的比例。>
如何从表 2 创建表 1(这是我在 R 中设置当前数据框的方式)?在表 2 中,Q31、Q32、Q33 和 Q34 列分别是独立的命题,单元格中的值是李克特量表上 7 个选项的数字代码。
表一
性别 | 年龄段 | 问题 | 非常同意 |
---|---|---|---|
1 | 30 - 39 | 31 | 0.21 |
2 | 30 - 39 | 31 | 0.48 |
1 | 40 - 49 | 31 | 0.12 |
2 | 40 - 49 | 31 | 0.65 |
表 2
性别 | 年龄段 | Q31 | Q32 | Q33 | Q34 |
---|---|---|---|---|---|
1 | 30 - 39 | 1 | 7 | 1 | 5 |
2 | 30 - 39 | 3 | 5 | 2 | 6 |
1 | 40 - 49 | 4 | 6 | 3 | 2 |
2 | 40 - 49 | 2 | 2 | 4 | 2 |
接受任何建议,因为我一直在反对这个问题太久了!谢谢!
解决方法
第一步可能是将您的广泛数据转换为长格式(年龄、性别以及一列用于问题类型和一列用于该问题的答案)。使用这种长格式或整洁的数据,您可以轻松地按问题、年龄和性别分组,并计算每个答案的比例。
代码
library(tidyverse)
df %>%
pivot_longer(cols = -c(Sex,`Age Group`),names_to = "Question",values_to = "Value") %>%
group_by(Question,Sex,`Age Group`) %>%
summarise(`Strongly Agree` = sum(Value == 7)/n(),`Slightly Agree` = sum(Value == 6)/n(),Agree = sum(Value == 5)/n(),Neutral = sum(Value == 4)/n(),Disagree = sum(Value == 3)/n(),`Slightly Disagree` = sum(Value == 2)/n(),`Strongly Disagree` = sum(Value == 1)/n())
输出
# A tibble: 16 x 10
# Groups: Question,Sex [8]
Question Sex `Age Group` `Strongly Agree` `Slightly Agree` Agree Neutral Disagree `Slightly Disagree` `Strongly Disagree`
<chr> <int> <fct> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 Q31 1 30-39 0 0 0 0 0 0 1
2 Q31 1 40-49 0 0 0 1 0 0 0
3 Q31 2 30-39 0 0 0 0 1 0 0
4 Q31 2 40-49 0 0 0 0 0 1 0
注意:在您的示例表 2 中,每个性别 x 年龄组合都存在一次,因此您示例的比例为 0 或 1。
数据
df <- structure(list(Sex = c(1L,2L,1L,2L),`Age Group` = structure(c(1L,.Label = c("30-39","40-49"),class = "factor"),Q31 = c(1L,3L,4L,Q32 = c(7L,5L,6L,Q33 = 1:4,Q34 = c(5L,2L)),class = "data.frame",row.names = c(NA,-4L))
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。