2017-05-02 59 views
0

我有一個數據框(d1),回答者回答了一系列問題(Q1-Q12),使問題成爲列名稱和答覆者的答案在所有列中都是1行,下一個答覆者的答案是列中的第2行。 另一個數據幀(D2)與Q1-Q12一個問題列作爲行和Correct_answers柱與正確答案的問題Q1-Q12將數據框的行中的值與參考數據框中的列匹配並更改值

我的問題是如何將受訪者的回答中D1與正確答案的比較d2,如果受訪者正確回答,則將d1中的值更改爲1;如果受訪者回答不正確,則將該值更改爲0。

感謝

+1

請提供一個小例子數據幀(一個或多個)和期望的輸出。見http://stackoverflow.com/questions/5963269/how-to-make-a-great-r-reproducible-example – coffeinjunky

回答

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 
相關問題