R - How can I change the values of a dataframe based off a scoring key?

Viewed 33
Answer.Key <- c(3, 5, 1, 3, 4, 4, 4, 4, 1, 2, 1, 2, 4, 2, 2, 2, 3, 4, 1, 4, 4, 4, 4, 2, 5, 2, 2, 2, 2, 4, 2, 1, 3, 1, 3, 4, 4, 2, 4, 4, 3, 2, 3, 3, 2, 4, 1)
# A tibble: 341 x 47
   Item1 Item2 Item3 Item4 Item5 Item6 Item7 Item8 Item9 Item10 Item11 Item12 Item13 Item14 Item15
   <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>  <dbl>
 1     2     5     1     1     2     4     4     2     5      2      1      2      1      1      2
 2     1     5     1     3     4     4     4     4     1      2      1      2      2      2      2
 3     2     5     1     3     4     4     4     2     1      2      1      2      3      2      2
 4     3     5     1     3     4     4     4     4     1      2      1      2      4      2      1
 5     1     5     4     3     4     4     4     4     1      2      4      2      2      2      1
 6     3     5     1     3     4     4     4     4     4      2      1      2      4      2      2
 7     3     5     1     3     4     4     4     4     4      2      1      2      2      2      2
 8     3     5     1     3     2     4     4     4     1      2      1      2      1      1      2
 9     3     5     1     3     4     4     4     4     1      2      1      2      2      2      1
10     3     5     1     3     4     4     4     4     1      2      1      2      4      2      2
# … with 331 more rows, and 32 more variables: Item16 <dbl>, Item17 <dbl>, Item18 <dbl>,
#   Item19 <dbl>, Item20 <dbl>, Item21 <dbl>, Item22 <dbl>, Item23 <dbl>, Item24 <dbl>,
#   Item25 <dbl>, Item26 <dbl>, Item27 <dbl>, Item28 <dbl>, Item29 <dbl>, Item30 <dbl>,
#   Item31 <dbl>, Item32 <dbl>, Item33 <dbl>, Item34 <dbl>, Item35 <dbl>, Item36 <dbl>,
#   Item37 <dbl>, Item38 <dbl>, Item39 <dbl>, Item40 <dbl>, Item41 <dbl>, Item42 <dbl>,
#   Item43 <dbl>, Item44 <dbl>, Item45 <dbl>, Item46 <dbl>, Item47 <dbl>

I have the answers to a multiple choice test. 341 participants answered 47 questions. I have a key to this test as well. I understand how to use a for loop to change correct answers in one column at a time to 0, so I can just count how many zeros there are in a row and that is that participant's score. Only issue is there are 47 columns and each column has a different correct answer.

How can I use my answer key and assign each value in the answer key to its specific column? This would make the process much more efficient than writing 47 for loops for each column.

Thanks for any help.

1 Answers

R is vectorized, so you may do

res <- t(Answer.Key == t(test))
res
#    Item1 Item2 Item3 Item4 Item5 Item6 Item7 Item8 Item9 Item10 Item11 Item12 Item13 Item14 Item15
# 1  FALSE  TRUE  TRUE FALSE FALSE  TRUE  TRUE FALSE FALSE   TRUE   TRUE   TRUE  FALSE  FALSE   TRUE
# 2  FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE   TRUE   TRUE   TRUE  FALSE   TRUE   TRUE
# 3  FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE  TRUE   TRUE   TRUE   TRUE  FALSE   TRUE   TRUE
# 4   TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE   TRUE   TRUE   TRUE   TRUE   TRUE  FALSE
# 5  FALSE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE   TRUE  FALSE   TRUE  FALSE   TRUE  FALSE
# 6   TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE   TRUE   TRUE   TRUE   TRUE   TRUE   TRUE
# 7   TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE FALSE   TRUE   TRUE   TRUE  FALSE   TRUE   TRUE
# 8   TRUE  TRUE  TRUE  TRUE FALSE  TRUE  TRUE  TRUE  TRUE   TRUE   TRUE   TRUE  FALSE  FALSE   TRUE
# 9   TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE   TRUE   TRUE   TRUE  FALSE   TRUE  FALSE
# 10  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE  TRUE   TRUE   TRUE   TRUE   TRUE   TRUE   TRUE

and

rowSums(res)
# 1  2  3  4  5  6  7  8  9 10 
# 8 13 12 14 10 14 13 12 13 15 
Related