R:子集匹配的单词

时间:2014-04-23 10:34:21

标签: string r search subset

下面,

a<-c("Look at the sky", "Sun is bright", "cloudy day")
b<-c("sky", "day")

我想根据ab进行分组。我的首选答案是:

"Look at the sky", "cloudy day"

如何在R?

中执行此操作

2 个答案:

答案 0 :(得分:6)

选项1

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

匹配
sapply(b, grepl, a)

       sky   day
[1,]  TRUE FALSE
[2,] FALSE FALSE
[3,] FALSE  TRUE

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

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

[1] "Look at the sky" "cloudy day"     

选项2

创建组合的正则表达式

paste(b, collapse="|")

[1] "sky|day"

和grep with it

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

[1] "Look at the sky" "cloudy day"     

答案 1 :(得分:1)

stringi包中尝试字符串搜索工具:

library(stringi)
a[sapply(a, function(ae) any(stri_detect_fixed(ae, b)))]
## [1] "Look at the sky" "cloudy day"

在这里,我们检测a中的每个字符串是否包含b中的任何字符串作为其子序列。