将数据行中的值与参考数据框中的列匹配,并更改值

时间:2017-05-02 22:20:05

标签: r

我有一个数据框(d1),受访者回答了一系列问题(Q1-Q12),这样问题就是列名,受访者的答案是所有列的1行,下一个受访者答案是行两列之间。 另一个数据帧(d2)有一个问题列,Q1-Q12为行,Correct_answers列有问题Q1-Q12的正确答案

我的问题是如何将d1中的受访者答案与d2中的正确答案进行比较,如果答辩者回答正确,则将d1中的值更改为1;如果答复者回答错误,则将0中的值更改为

由于

1 个答案:

答案 0 :(得分:0)

这是一种使用dplyr和tidyr函数的方法,特别是gatherspread

library(dplyr)
library(tidyr)

df1 <- tribble(
    ~respondent, ~Q1, ~Q2, ~Q3, ~Q4,
              1, "A", "B", "A", "C",
              2, "B", "B", "B", "C",
              3, "A", "C", "B", "C",
              4, "A", "B", "B", "A"
)

df2 <- tribble(
    ~question, ~correct,
    "Q1",       "A",
    "Q2",       "B",
    "Q3",       "B",
    "Q4",       "C"
)


df1 %>% 
    gather(question, answer, -respondent) %>%
    left_join(df2) %>%
    mutate(compare = ifelse(answer == correct, 1, 0)) %>%
    select(-answer, -correct) %>%
    spread(question, compare)

#> Joining, by = "question"
#> # A tibble: 4 × 5
#>   respondent    Q1    Q2    Q3    Q4
#> *      <dbl> <dbl> <dbl> <dbl> <dbl>
#> 1          1     1     1     0     1
#> 2          2     0     1     1     1
#> 3          3     1     0     1     1
#> 4          4     1     1     1     0