【问题标题】:zigzag pattern in matrix of questions问题矩阵中的锯齿形图案
【发布时间】:2020-05-18 02:52:30
【问题描述】:

我正在处理一项调查数据。它询问了几个关于受访者对几个项目的满意度的矩阵问题。下面是一个例子。

q1:您对 A 项的满意程度如何? "非常满意" "比较满意" 有些不满意" 很不满意"

q2:您对 B 项的满意程度如何? "非常满意" "比较满意" 有些不满意" 很不满意"

q3:您对 C 项的满意程度如何? "非常满意" "比较满意" 有些不满意" 很不满意"

q4:您对 D 项的满意程度如何? "非常满意" "比较满意" 有些不满意" 很不满意"

数据如下:

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

我应该通过以下模式找出所有这些观察结果:

案例1

如果 q1 = “非常满意” 并且 q2 = “有点满意” 并且 q3 = “非常满意” q4 = “有点满意”

案例2

q1 = “非常满意” q2 = “有点不满意” q3 = “非常满意” q4 = “有点不满意”

案例3

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


** 提前感谢您! **

【问题讨论】:

  • 您是否根据多列中的逻辑条件对项目的选择进行了任何搜索?我很确定这已经被问及回答了。
  • 我还要求您不要同时交叉发布到 twitter 或其他地方——这大多是不受欢迎的。如果你在这里问,相信足够多的眼球会得到它。
  • 仅供参考,ifelse(cond, TRUE, FALSE)cond相同(没有ifelse)。
  • 是的,我搜索过,但以前的解决方案都不起作用。
  • 您应该发布您的全部编码工作以及您找到的帖子的链接。我们无法知道您犯了什么错误。如果您需要做的就是“找到”存在模式的行,那么:df[with(df, q1 %in% "Very satisfied" &amp; q2 %in% "Somewhat satisfied" &amp; q3 %in% "Very satisfied" &amp; q4 %in% "Somewhat satisfied"), ]

标签: r pattern-recognition zigzag


【解决方案1】:

对于您提供的示例,因为 q1 和 q3 在案例测试中的条件都相同,您可以通过以下方式获得您的 zigzag 结果:

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

r2evans 已经指出了使用ifelse 的冗余。如果您想要 zigzag 结果的数值,您可以更紧凑地使用:

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

【讨论】:

    猜你喜欢
    • 2018-08-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-16
    • 1970-01-01
    • 1970-01-01
    • 2019-11-26
    • 1970-01-01
    相关资源
    最近更新 更多