Remove entries from string vector containing specific characters in R
We can use grep
to find out which values in y
match the pattern in x
and exclude them using !%in%
y[!y %in% grep(paste0(x, collapse = "|"), y, value = T)]
#[1] "kot" "kk" "y"
Or even better with grepl
as it returns boolean vectors
y[!grepl(paste0(x, collapse = "|"), y)]
A concise version with grep
using invert
and value
parameter
grep(paste0(x, collapse = "|"), y, invert = TRUE, value = TRUE)
#[1] "kot" "kk" "y"
The answer given by @Ronak looks preferable to mine, but one option is to use sapply
with grepl
to get a matrix of matches against y
, for each entry in x
, then to roll that up with another call to apply
.
> y[!apply(sapply(x, function(q) {grepl(q, y)}), 1, function(x) {sum(as.numeric(x)) > 0})]
[1] "kot" "kk" "y"
Here is what I mean by matrix of matches:
> sapply(x, function(q) { grepl(q, y) })
a b c kt
[1,] TRUE TRUE FALSE FALSE
[2,] FALSE FALSE FALSE FALSE
[3,] FALSE FALSE TRUE FALSE
[4,] FALSE FALSE FALSE TRUE
[5,] FALSE FALSE FALSE FALSE
[6,] FALSE FALSE FALSE FALSE
^^^^ each column is a match result for each element of x