Множественный выбор в R: как привести в порядок данные опроса, используя dplyr / tidyr? - PullRequest
0 голосов
/ 08 мая 2019

Я использовал набор () из пакета tidyr R., чтобы привести в порядок данные моего опроса.

Интересно, есть ли способ ответить на вопросы с несколькими вариантами ответов при приведении в порядок данных?

Этот вопрос не о конкретной ошибке, а о том, какая стратегия наиболее подходит.

Представьте себе следующий тиббл:

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 () увеличится для всех двойных упоминаний Гарри о y2.

Поток вопросов, которые у меня есть по этой теме, следующий:

  1. Было бы лучше / проще для анализа собрать несколько ответов в один столбец?
  2. Если да, как вы делаете это эффективно?
  3. Если нет, каковы мои последствия?Остерегаться в дальнейшем анализе, когда я сохраняю мультиответы в длинном формате?
  4. и как вы включаете эти значения в свой код?(Может быть, конкретный «групповой» аргумент для id? Не могли бы вы показать мне пример?)

1 Ответ

1 голос
/ 08 мая 2019

Я думаю, что самый простой способ - это собрать все ответы в один столбец.

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))
...