根据R

时间:2018-08-18 17:15:22

标签: r tidyverse qualtrics

我在Qualtrics中进行了4种条件的研究。为了方便起见,我在下面的示例中仅包含3个。产生的数据如下所示:

condition  Q145   Q243   Q34    Q235   Q193   Q234   Q324   Q987   Q88         
condition  How a? How b? How c? How a? How b? How c? How a? How b? How c? 
1          3      5      2
1          5      4      7
1          3      1      4
2                               3      4      7
2                               1      2      8
2                               1      3      9
3                                                     7      6      5
3                                                     8      1      3
3                                                     9      2      2

第二行中的问题在实际数据集中更长且更复杂,但在不同条件下是一致的。在此示例中,我试图捕获一致性以及默认变量名称(均以Q开头)不匹配的事实。

最终,我想要一个看起来像下面的数据框。我想将对一个问题的所有答复合并到每个问题的一栏中。 (然后,我将使用更简洁的变量名重命名冗长的问题,并“整理”数据。)

condition  How a? How b? How c? 
1          3      5      2
1          5      4      7
1          3      1      4
2          3      4      7
2          1      2      8
2          1      3      9
3          7      6      5
3          8      1      3
3          9      2      2

对于实现此目标的任何想法,我将不胜感激。

1 个答案:

答案 0 :(得分:1)

library(tidyverse)

file = 'condition,Q145  ,Q243  ,Q34   ,Q235  ,Q193  ,Q234  ,Q324  ,Q987  ,Q88
        condition,How a?,How b?,How c?,How a?,How b?,How c?,How a?,How b?,How c?
        1        ,3     ,5     ,2     ,      ,      ,      ,      ,      ,
        1        ,5     ,4     ,7     ,      ,      ,      ,      ,      ,
        1        ,3     ,1     ,4     ,      ,      ,      ,      ,      ,
        2        ,      ,      ,      ,3     ,4     ,7     ,      ,      ,
        2        ,      ,      ,      ,1     ,2     ,8     ,      ,      ,
        2        ,      ,      ,      ,1     ,3     ,9     ,      ,      ,
        3        ,      ,      ,      ,      ,      ,      , 7    , 6    , 5
        3        ,      ,      ,      ,      ,      ,      , 8    , 1    , 3
        3        ,      ,      ,      ,      ,      ,      , 9    , 2    , 2'

# Read in just the data without the weird header situation
data <- read_csv(file, col_names = FALSE, skip = 2)

# Pull out the questions row and reshape into a dataframe to make the next part easy
questions <- gather(read_csv(file, col_names = FALSE, skip = 1, n_max = 1))

# Generate list of data frames (one df for each question)
split(questions, questions$value) %>%
  # Then coalesce the columns
  map_df(~do.call(coalesce, data[, .x$key]))

给出以下结果:

# A tibble: 9 x 4
  condition `How a?` `How b?` `How c?`
      <int>    <int>    <int>    <int>
1         1        3        5        2
2         1        5        4        7
3         1        3        1        4
4         2        3        4        7
5         2        1        2        8
6         2        1        3        9
7         3        7        6        5
8         3        8        1        3
9         3        9        2        2

当然,如果您打算最终转换为长格式,则可以执行以下操作:

data %>%
  gather(key, answer, -X1) %>%
  filter(!is.na(answer)) %>%
  left_join(questions, by = 'key') %>%
  select(condition = X1, question = value, answer)

结果如下:

# A tibble: 27 x 3
   condition question answer
       <int> <chr>     <int>
 1         1 How a?        3
 2         1 How a?        5
 3         1 How a?        3
 4         1 How b?        5
 5         1 How b?        4
 6         1 How b?        1
 7         1 How c?        2
 8         1 How c?        7
 9         1 How c?        4
10         2 How a?        3
# ... with 17 more rows