2017-07-17 3 views
1

Gibt es eine einfache Möglichkeit zu finden, ob ein Stringvektor eine bestimmte Zeichenfolge aus einem anderen Vektor enthält? Ich habe eine Datenbank von Mail-Adressen und (ot rund 100 Liste)Suchen, ob ein Stringvektor eine beliebige Zeichenfolge aus einem anderen Vektor enthält

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

habe ich versucht, mit% in% der spezifischen Verlage nur diejenigen auswählen müssen, aber das ist für ganze fazes geprüft:

Mail %in% InterestingPublishers 
FALSE FALSE FALSE FALSE 

auch Grepl und grep nicht helfen, weil ich nicht Vektor als Eingabe setzen kann:

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

gibt es eine einfache Möglichkeit, das zu tun?

+3

'Mail [fehlende oder (sapply (InterestingPublishers, Funktion (x), die (Grepl (x, Mail)))]] '' –

+1

Probieren Sie 'stringi :: stri_detect (Mail, regex = einfügen (InteressantePublisher, collapse =" | "))' – akrun

+3

Nur 'sub ('. * @', '', Mail)% in% InterestPublishers' – Sotos

Antwort

1

Es scheint, dass Sie an der Domäne interessiert sind. In diesem Fall ich würde vorschlagen, alles, aber die Domain und Top-Level-Domain zu entfernen und einfach verwenden %in%, dh

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

Während d.b ‚s Antwort (zur Zeit in den Kommentaren) hier durchaus sinnvoll ist, ist eine andere Basen- R Lösung mit Schleifen (die langsamer zu neigen, kann aber für Anfänger transparenter sein):

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

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

PS . Sie könnten a slight speed improvement (wenn das wichtig ist) mit lapply anstelle von sapply in d.b 's Lösung.

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