Предположим, у меня есть два вектора строк:
s1<-c("ab", "cd-e", "hij")
s2<-c("0ab12345", "xyzcd-e", "uvwxyz132", "13216469", "%qrst012")
я хотел найти элементы в s1
, которые появляются в s2
, поэтому приведенный выше пример даст результат
"ab", "cd-e"
Мы можем grepl
над s1 для каждого значения в s2
и выбрать, является ли какое-либо из них TRUE
.
s1[colSums(sapply(s1, grepl, s2)) > 0]
#[1] "ab" "cd-e"
Используйте Filter
с указанной функцией. Пакеты не используются.
Filter(function(x) any(grepl(x, s2)), s1)
## [1] "ab" "cd-e"
Или с keep
от purrr
keep(s1, ~ any(grepl(.x, s2)))
Вот один из способов
s1[sapply(s1,function(x) any(grepl(x,s2)))]
[1] "ab" "cd-e
Попробуйте
unlist(lapply(s1, function(x) s1[grep(x, s2)]))