R中的多项选择:如何使用dplyr / tidyr整理调查数据?

时间:2019-05-08 10:02:13

标签: r dplyr tidyr

我一直在使用tidyr R软件包中的collect()来整理我的调查数据。

我想知道整理数据时是否存在处理多项选择题的方法?

这个问题不是关于特定错误,而是更多关于哪种策略最合适。

想象一下以下小标题:

tb1 <- tribble(~id,~x1,~x2,~x3,~y1,~y2,~z,
               "Harry",1,1,NA,NA,1,"No",
               "Jess",NA,1,1,1,1,"Yes",
               "George",NA,NA,1,NA,1,"No")

在收集此多个问题的结果时,我(从逻辑上)得到了“哈利”,“杰西”和“乔治”的多行:

tb1 %>%
  gather(X,val,x1:x3,-id,-z) %>%
  filter(!is.na(val)) %>%
  select(-val) %>%
  gather(Y,val,y1:y2,-id,-X,-z) %>%
  filter(!is.na(val)) %>%
  select(-val) 

# A tibble: 7 x 4
  id     z     X     Y    
  <chr>  <chr> <chr> <chr>
1 Jess   Yes   x2    y1   
2 Jess   Yes   x3    y1   
3 Harry  No    x1    y2   
4 Harry  No    x2    y2   
5 Jess   Yes   x2    y2   
6 Jess   Yes   x3    y2   
7 George No    x3    y2

我对多个条目感到有些担心,并且想知道是否存在一种很好的策略来处理需要收集的具有二进制列的调查的多项选择问题。

最后,我希望能够绘制并分析各种变量的值:即人们选择y2的次数。

这种长格式似乎不太实用,因为count()将适用于Harry对y2的所有重复提及。

我对此主题的疑问流如下:

  1. 将多个响应收集到单个列中进行分析会更好/更容易吗?
  2. 如果是,您如何有效地做到这一点?
  3. 如果否,当我以长格式保存多答复时,在进一步分析中需要注意哪些含义?
  4. 以及如何将这些含义合并到代码中? (也许是id的特定“组”参数?您能给我看看一个例子吗?)

1 个答案:

答案 0 :(得分:1)

我认为最简单的方法是明确地将所有响应收集到一栏中。

library(tidyverse)

tb1 %>%   
  spread(key = z, value = z, sep = "_") %>%
  gather(key = "Question", value = "Answer", -id, na.rm = T) %>%
  select(-Answer) -> reshape_tb1

> reshape_tb1
# A tibble: 12 x 2
   id     Question
   <chr>  <chr>   
 1 Harry  x1      
 2 Harry  x2      
 3 Jess   x2      
 4 George x3      
 5 Jess   x3      
 6 Jess   y1      
 7 George y2      
 8 Harry  y2      
 9 Jess   y2      
10 George z_No    
11 Harry  z_No    
12 Jess   z_Yes

通过这种方式,您可以轻松地将其提供给ggplot2

ggplot(reshape_tb1) +
  geom_bar(aes(x = Question))