Мы можем использовать rowSums
, сделав длину вектора c(1, 8, 4)
такой же, как длина столбца «Задача», и сделать ==
, и получить rowSums
i1 <- startsWith(names(df1), 'Task')
df1$COUNT <- rowSums(df1[i1] == c(1, 8, 4)[col(df1[i1])])
df1$COUNT
#[1] 1 1 2 1 3
Или с помощью sweep
rowSums(sweep(df1[i1], 2, c(1, 8, 4), `==`))
Или другой вариант: apply
df1$COUNT <- apply(df1[i1], 1, function(x) sum(x == c(1, 8, 4)))
ПРИМЕЧАНИЕ. Ни одно из решений не требует внешнего пакета
данных
df1 <- data.frame(Participant = 1:5, Task1 = c(4, 3, 1, 5, 1),
Task2 = c(8, 8, 3, 6, 8), Task3 = c(1, 7, 4, 4, 4))