Предположим, у меня есть следующий персонаж
c <- "1 NA NA 4 5 6 NA NA 9 10 NA NA 13 14 15 16 17 18 19 20 NA NA 23 NA NA NA NA"
Как я могу проверить, содержит ли он 1, 5 и 6? Без получения 15, 16 и т. д. как ложного срабатывания?
Предположим, у меня есть следующий персонаж
c <- "1 NA NA 4 5 6 NA NA 9 10 NA NA 13 14 15 16 17 18 19 20 NA NA 23 NA NA NA NA"
Как я могу проверить, содержит ли он 1, 5 и 6? Без получения 15, 16 и т. д. как ложного срабатывания?
Вы можете использовать границу слова \\b
вокруг 1,5,6
:
grepl("\\b[156]\\b", c)
# [1] TRUE
Если вы хотите проверить, все ли 1,5,6
содержатся в строке, вы можете векторизовать grepl
в позиции шаблона:
all(Vectorize(grepl)(paste("\\b", c(1,5,6), "\\b", sep = ""), c))
# [1] TRUE
Когда мы удаляем 1
из строки:
c <- "NA NA 4 5 6 NA NA 9 10 NA NA 13 14 15 16 17 18 19 20 NA NA 23 NA NA NA NA"
grepl("\\b[156]\\b", c) # this is or condition, will still give true
# [1] TRUE
all(Vectorize(grepl)(paste("\\b", c(1,5,6), "\\b", sep = ""), c)) # This gives FALSE since
# pattern \\b1\\b is not there
# [1] FALSE
outer
. colSums(!outer(paste("\\b", c(1,5,6), "\\b", sep = ""), col, Vectorize(grepl))) == 0
предположим, что col = df$somecolumn
— это столбец, который вы хотите протестировать.
- person Psidom; 20.09.2016