查找字符串向量是否包含来自其他向量的任何字符串

时间:2017-07-17 14:38:22

标签: r text

是否有一种简单的方法可以查找字符串向量是否包含来自其他向量的特定字符串? 我有一个邮件地址数据库,只需要选择特定发布者的数据库(列表大约100个)

Mail <- c("xxx1@xxx.xx", "xxx2@xxx.xx", "xxx3@yyy.xx", "xxx4@zzz.xx")
InterestingPublishers <- c("zzz.xx", "xxx.xx")

我尝试使用%in%,但检查了整个fazes:

Mail  %in% InterestingPublishers 
FALSE FALSE FALSE FALSE

grepl和grep也无济于事,因为我无法将vector作为输入:

grepl(InterestingPublishers, Mail)
Warning message:
In grepl(InterestingPublishers, Mail) :
  argument 'pattern' has length > 1 and only the first element will be used

有没有简单的方法呢?

2 个答案:

答案 0 :(得分:1)

虽然d.b的答案(目前在评论中)是完全合理的,但这里是使用循环的另一个基础 - R解决方案(对于初学者来说往往更慢但是更透明): / p>

containsi <- integer()
for (i in InterestingPublishers) {
  containsi <- c(containsi, grep(i, Mail))
}
Mail[containsi]

[1] "xxx4@zzz.xx" "xxx1@xxx.xx" "xxx2@xxx.xx"

PS。在lapply的解决方案中使用sapply代替d.b可能会得到a slight speed improvement(如果这很重要)。

Mail[unlist(lapply(InterestingPublishers, function(x) grep(x, Mail)))]

答案 1 :(得分:1)

您似乎对该域感兴趣。在这种情况下,我建议删除除域名和顶级域名之外的所有内容,只需使用%in%,即

sub('.*@', '', Mail) %in% InterestingPublishers