下面,
a<-c("Look at the sky", "Sun is bright", "cloudy day")
b<-c("sky", "day")
我想根据a
对b
进行分组。我的首选答案是:
"Look at the sky", "cloudy day"
如何在R?
中执行此操作答案 0 :(得分:6)
您可以将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"
创建组合的正则表达式
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
中的任何字符串作为其子序列。