В base R
мы можем использовать именованный вектор, заменить значения в «Товарах» с помощью именованного вектора, выполнить сравнение (==
) с «Предметами», чтобы получить логический вектор, который может быть используется в ifelse
или преобразовывается в индекс позиции и заменяет значения, основанные на этом индексе, на «правильные», «неправильные»
nm1 <- setNames(c("Mug1", "Mug2"), c("Cup1", "Cup2"))
nm2 <- c(nm1, setNames(names(nm1), nm1))
df$Out <- with(df, c("Incorrect", "Correct")[1 + (as.character(Items) ==
nm2[as.character(Goods)])])
df
# Items Goods Out
#1 Mug1 Cup1 Correct
#2 Mug1 Mug2 Incorrect
#3 Mug1 <NA> <NA>
#4 Mug2 Mug1 Incorrect
#5 Mug2 Cup2 Correct
#6 Cup1 Mug1 Correct
#7 Cup2 Mug2 Correct
#8 Mug2 Cup1 Incorrect
#9 Cup1 Mug2 Incorrect
или ifelse
with(df, unname(ifelse(as.character(Items) ==
nm2[as.character(Goods)], "Correct", "Incorrect")))
#[1] "Correct" "Incorrect" NA "Incorrect" "Correct"
#[6] "Correct" "Correct" "Incorrect" "Incorrect"