2017-07-17 69 views
1

有沒有簡單的方法來查找字符串向量是否包含來自其他向量的特定任何字符串? 我有郵件地址的數據庫,並且只需要選擇那些來自特定出版商(列表OT約100)查找字符串向量是否包含來自其他向量的任何字符串

Mail <- c("[email protected]", "[email protected]", "[email protected]", "[email protected]") 
InterestingPublishers <- c("zzz.xx", "xxx.xx") 

我在%使用%嘗試過,但檢查整個fazes:

Mail %in% InterestingPublishers 
FALSE FALSE FALSE FALSE 

而且grepl和grep沒有幫助,因爲我不能把矢量作爲輸入:

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

有沒有什麼簡單的方法來做到這一點?

+3

'郵件[不公開(sapply(InterestingPublishers,函數(X),這(grepl(X,郵件)) ))]' –

+1

嘗試'stringi :: stri_detect(郵件,正則表達式=膏(InterestingPublishers,塌陷= 「|」 '* @'))' – akrun

+3

只是'子( '',郵件)%的%InterestingPublishers' – Sotos

回答

1

看來你感興趣的領域。在這種情況下,我建議您點去除一切,但域和頂級域和簡單的使用%in%,即

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

雖然d.b的回答(目前在評論)是完全合理的這裏是另一個鹼基R採用溶液循環(這往往是慢,但可以爲初學者更加透明):

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

[1] "[email protected]" "[email protected]" "[email protected]" 

PS 。你可能會在d.b的解決方案使用lapply代替sapply得到a slight speed improvement(如果該事項)。

Mail[unlist(lapply(InterestingPublishers, function(x) grep(x, Mail)))] 
相關問題