我正面临以下问题。我有一个包含多个问题的测试,并且主题的答案记录在变量Q1至Q3中(实际上我还有很多问题)
URI
我将向量中问题1、2和3的正确答案
test <- tibble(
Q1 = c(4, 5, 6),
Q2 = c(3, 2, 1),
Q3 = c(4, 1, 3))
现在我创建一个新变量,该变量计算每个主题的正确答案的数量。我的猜测是它可以与map2函数一起使用,但是我不知道该怎么做。
答案 0 :(得分:7)
我们可以在base R
中创建一个逻辑矩阵,然后执行rowSums
来计算正确答案的数量
test$newCol <- rowSums(test == correct_answers[col(test)])
或者使用tidyverse
,将map2
与reduce
结合使用,以在数据集中创建“ newCol”
library(tidyverse)
test %>%
mutate(newCol = map2(., correct_answers, `==`) %>%
reduce(`+`))
答案 1 :(得分:5)
这行吗?
library(purrr)
test %>%
map_dbl(~sum(.x%in%correct_answers))
答案 2 :(得分:5)
我们可以使用mapply
然后执行rowSums
df$ans <- rowSums(mapply(`==`, test, correct_answers))
使用map2
可能类似于
library(purrr)
map2(test, correct_answers, function(x, y) sum(x == y))
答案 3 :(得分:4)
rowSums(apply(test, 2, `==`, correct_answers))
答案 4 :(得分:1)
上面已经有很多好的答案。为了澄清起见,您的帖子以两种不同的方式进行了解释。
如果向量correct_answers
的每个问题有一个正确答案(即正确的Q1答案是4而只有4)。然后,坚持使用purrr
,您可以选择以下答案:
library(tidyverse)
test %>%
mutate(newCol = map2(., correct_answers, `==`) %>%
reduce(`+`))
如果您说correct_answers
对于任何问题都有正确的答案,那么这个就是那个:
library(purrr)
test %>%
map_dbl(~sum(.x%in%correct_answers))
答案 5 :(得分:0)
我认为这是基于R的?sweep()
的完美用例-
test$n_correct <- rowSums(sweep(test, 2, correct_answers, "=="))
# A tibble: 3 x 4
Q1 Q2 Q3 n_correct
<dbl> <dbl> <dbl> <dbl>
1 4 3 4 1
2 5 2 1 1
3 6 1 3 1