R中的AND grepl操作

AND grepl operation in R

假设我有以下字符

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"

我怎样才能 grepl 测试它是否包含 1、5 和 6?没有将 15、16 等作为误报?

您可以在 1,5,6:

周围使用单词边界 \b
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