R - 如何根据评分键更改数据框的值?
R - How can I change the values of a dataframe based off a scoring key?
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>
我有多项选择题的答案。 341 名参与者回答了 47 个问题。我也有这个测试的钥匙。我了解如何使用 for 循环一次将一列中的正确答案更改为 0,因此我可以计算一行中有多少个零,这就是参与者的分数。唯一的问题是有 47 列,每列都有不同的正确答案。
如何使用我的答案键并将答案键中的每个值分配给它的特定列?这将使该过程比为每列编写 47 个 for 循环更有效。
感谢您的帮助。
R 是矢量化的,所以你可以这样做
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
和
rowSums(res)
# 1 2 3 4 5 6 7 8 9 10
# 8 13 12 14 10 14 13 12 13 15
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>
我有多项选择题的答案。 341 名参与者回答了 47 个问题。我也有这个测试的钥匙。我了解如何使用 for 循环一次将一列中的正确答案更改为 0,因此我可以计算一行中有多少个零,这就是参与者的分数。唯一的问题是有 47 列,每列都有不同的正确答案。
如何使用我的答案键并将答案键中的每个值分配给它的特定列?这将使该过程比为每列编写 47 个 for 循环更有效。
感谢您的帮助。
R 是矢量化的,所以你可以这样做
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
和
rowSums(res)
# 1 2 3 4 5 6 7 8 9 10
# 8 13 12 14 10 14 13 12 13 15