R:子集匹配的单词

ram*_*esh 3 string search r subset

这里,

a<-c("Look at the sky", "Sun is bright", "cloudy day")
b<-c("sky", "day")
Run Code Online (Sandbox Code Playgroud)

我想a基于的子集b.我的首选答案是:

"Look at the sky", "cloudy day"
Run Code Online (Sandbox Code Playgroud)

在R中如何做到这一点?

Bac*_*lin 6

选项1

您可以将b与b中的所有字词匹配 sapply

sapply(b, grepl, a)

       sky   day
[1,]  TRUE FALSE
[2,] FALSE FALSE
[3,] FALSE  TRUE
Run Code Online (Sandbox Code Playgroud)

然后使用apply和子集折叠所有行a.

a[apply(sapply(b, grepl, a), 1, any)]

[1] "Look at the sky" "cloudy day"     
Run Code Online (Sandbox Code Playgroud)

选项2

创建组合的正则表达式模式

paste(b, collapse="|")

[1] "sky|day"
Run Code Online (Sandbox Code Playgroud)

用它来grep

a[grepl(paste(b, collapse="|"), a)]

[1] "Look at the sky" "cloudy day"     
Run Code Online (Sandbox Code Playgroud)