简体   繁体   English

问题矩阵中的锯齿形图案

[英]zigzag pattern in matrix of questions

I am working on a survey data.我正在处理调查数据。 It asks several matrix questions about level of satisfaction of respondents about several items.它询问了几个关于受访者对几个项目的满意程度的矩阵问题。 Below is an example.下面是一个例子。

q1: how much satisfied are you with the item A? Q1:您对 A 项的满意程度如何? "very satisfied" "somewhat satisfied" somewhat dissatisfied" very dissatisfied" "非常满意" "比较满意" 有点不满意" 非常不满意"

q2: how much satisfied are you with the item B? Q2:您对 B 项的满意程度如何? "very satisfied" "somewhat satisfied" somewhat dissatisfied" very dissatisfied" "非常满意" "比较满意" 有点不满意" 非常不满意"

q3: how much satisfied are you with the item C? Q3:您对C项的满意程度如何? "very satisfied" "somewhat satisfied" somewhat dissatisfied" very dissatisfied" "非常满意" "比较满意" 有点不满意" 非常不满意"

q4: how much satisfied are you with the item D? Q4:您对 D 项的满意程度如何? "very satisfied" "somewhat satisfied" somewhat dissatisfied" very dissatisfied" "非常满意" "比较满意" 有点不满意" 非常不满意"

The data look as below:数据如下:

df <- data.frame(q1 = c("Very satisfied", "Somewhat satisfied", "Very satisfied", "Very satisfied", "Somewhat satisfied", "Very dissatisfied", "Very satisfied", "Very dissatisfied", "Very dissatisfied", "Somewhat dissatisfied"),
                 q2 = c("Somewhat satisfied", "Very satisfied", "Somewhat satisfied", "Very satisfied", "Very satisfied", "Somewhat dissatisfied", "Somewhat dissatisfied", "Somewhat dissatisfied", "Very dissatisfied", "Very dissatisfied"),
                 q3 = c("Very satisfied", "Somewhat satisfied", "Very satisfied", "Very satisfied", "Somewhat satisfied", "Very dissatisfied", "Very satisfied", "Very dissatisfied", "Very dissatisfied", "Somewhat dissatisfied"),
                 q4 = c("Somewhat satisfied", "Very satisfied", "Somewhat satisfied", "Very satisfied", "Very satisfied", "Somewhat dissatisfied", "Somewhat dissatisfied", "Somewhat dissatisfied", "Very dissatisfied", "Very dissatisfied"))

                      q1                    q2                    q3                    q4
1         Very satisfied    Somewhat satisfied        Very satisfied    Somewhat satisfied
2     Somewhat satisfied        Very satisfied    Somewhat satisfied        Very satisfied
3         Very satisfied    Somewhat satisfied        Very satisfied    Somewhat satisfied
4         Very satisfied        Very satisfied        Very satisfied        Very satisfied
5     Somewhat satisfied        Very satisfied    Somewhat satisfied        Very satisfied
6      Very dissatisfied Somewhat dissatisfied     Very dissatisfied Somewhat dissatisfied
7         Very satisfied Somewhat dissatisfied        Very satisfied Somewhat dissatisfied
8      Very dissatisfied Somewhat dissatisfied     Very dissatisfied Somewhat dissatisfied
9      Very dissatisfied     Very dissatisfied     Very dissatisfied     Very dissatisfied
10 Somewhat dissatisfied     Very dissatisfied Somewhat dissatisfied     Very dissatisfied

I am supposed to findout all those observations with the following pattern:我应该用以下模式找出所有这些观察结果:

case1情况1

if q1 = "Very satisfied" and q2 = "somewhat satisfied" and q3 = "very satisfied" and q4 = "somewhat satisfied"如果q1 = "非常满意" and q2 = "有点满意" and q3 = "非常满意" and q4 = "有点满意"

case2案例2

or q1 = "Very satisfied" and q2 = "somewhat dissatisfied" and q3 = "very satisfied" and q4 = "somewhat dissatisfied"q1 = "非常满意" and q2 = "有点不满意" and q3 = "非常满意" and q4 = "有点不满意"

case3案例3

or q1 = "Very satisfied" and q2 = "very dissatisfied" and q3 = "very satisfied" and q4 = "very dissatisfied"q1 =“非常满意”q2 =“非常不满意”q3 =“非常满意”q4 =“非常不满意”

I can find this pattern using below command. However, since I have to do this for several matrices and number of questions in each matrix varies, I wonder if anyone knows an easy way of doing this.


df %>%
  mutate(case1 = ifelse((q1 %in% "Very satisfied" & q2 %in% "Somewhat satisfied" & q3 %in% "Very satisfied" & q4 %in% "Somewhat satisfied"), TRUE, FALSE),
         case2 = ifelse((q1 %in% "Very satisfied" & q2 %in% "Somewhat dissatisfied" & q3 %in% "Very satisfied" & q4 %in% "Somewhat dissatisfied"), TRUE, FALSE),
         case3 = ifelse((q1 %in% "Very satisfied" & q2 %in% "Very dissatisfied" & q3 %in% "Very satisfied" & q4 %in% "Very dissatisfied"), TRUE, FALSE),
         zigzag = ifelse((case1 %in% TRUE | case2 %in% TRUE | case3 %in% TRUE), 1, 0)
         )


                      q1                    q2                    q3                    q4 case1 case2 case3 zigzag
1         Very satisfied    Somewhat satisfied        Very satisfied    Somewhat satisfied  TRUE FALSE FALSE      1
2     Somewhat satisfied        Very satisfied    Somewhat satisfied        Very satisfied FALSE FALSE FALSE      0
3         Very satisfied    Somewhat satisfied        Very satisfied    Somewhat satisfied  TRUE FALSE FALSE      1
4         Very satisfied        Very satisfied        Very satisfied        Very satisfied FALSE FALSE FALSE      0
5     Somewhat satisfied        Very satisfied    Somewhat satisfied        Very satisfied FALSE FALSE FALSE      0
6      Very dissatisfied Somewhat dissatisfied     Very dissatisfied Somewhat dissatisfied FALSE FALSE FALSE      0
7         Very satisfied Somewhat dissatisfied        Very satisfied Somewhat dissatisfied FALSE  TRUE FALSE      1
8      Very dissatisfied Somewhat dissatisfied     Very dissatisfied Somewhat dissatisfied FALSE FALSE FALSE      0
9      Very dissatisfied     Very dissatisfied     Very dissatisfied     Very dissatisfied FALSE FALSE FALSE      0
10 Somewhat dissatisfied     Very dissatisfied Somewhat dissatisfied     Very dissatisfied FALSE FALSE FALSE      0


** Thank you in advance! ** 先感谢您! ** **

For the example you offered since the conditions for q1 and q3 are all the same in the case-wise testing, you can get your zigzag result with just:对于您提供的示例,因为 q1 和 q3 的条件在个案测试中都相同,您只需使用以下命令即可获得锯齿形结果:

df[with(df, q1 == "Very satisfied" & 
            q2 == q4 & 
            q3 == "Very satisfied" & 
     q4 %in% c( "Very dissatisfied", "Somewhat dissatisfied", "Somewhat satisfied") ), ]

r2evans has already pointed out the redundancy of using ifelse . r2evans 已经指出了使用ifelse的冗余。 Had you wanted a numeric value for the zigzag result you could have more compactly used just:如果您想要zigzag结果的数值,您可以更紧凑地使用:

zigzag = as.numeric( case1 | case2 | case3 ) # since 1 == TRUE

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM