我有一个数据框(d1),受访者回答了一系列问题(Q1-Q12),这样问题就是列名,受访者的答案是所有列的1行,下一个受访者答案是行两列之间。 另一个数据帧(d2)有一个问题列,Q1-Q12为行,Correct_answers列有问题Q1-Q12的正确答案
我的问题是如何将d1中的受访者答案与d2中的正确答案进行比较,如果答辩者回答正确,则将d1中的值更改为1;如果答复者回答错误,则将0中的值更改为
由于
答案 0 :(得分:0)
这是一种使用dplyr和tidyr函数的方法,特别是gather
和spread
。
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