Вот очень компактное решение с использованием grepl
и регулярного выражения:
Некоторые иллюстративные данные:
set.seed(123)
df <- data.frame(
ID = paste0(rep(LETTERS[1:3], 2), sample(1:3, 6, replace = T)),
Var2 = rnorm(6),
stringsAsFactors = F)
df
wrong_IDs <- c('A1', 'B3', 'B1', 'C3')
Чтобы установить в 0 те строки, которые содержат wrong_IDs
, вы можете свернуть их значения в одну строку, разделенную только оператором чередования регулярных выражений |
, и указание grepl
сопоставить эти альтернативные шаблоны в df$ID
:
df$ID <- ifelse(grepl(paste0(wrong_IDs, collapse = "|"), df$ID), 0, df$ID)
df
ID Var2
1 0 0.07050839
2 0 0.12928774
3 C2 1.71506499
4 A3 0.46091621
5 0 -1.26506123
6 C1 -0.68685285