Finden Sie Übereinstimmungen eines Vektor von Zeichenfolgen in einem anderen Vektor von Zeichenfolgen

Ich versuche, eine Teilmenge eines Datenrahmens von Nachrichtenartikeln zu erstellen, in denen mindestens ein Element einer Reihe von Schlüsselwörtern oder Ausdrücken erwähnt wird.

# Sample data frame of articles
articles <- data.frame(id=c(1, 2, 3, 4), text=c("Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod", "tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,", "quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo", "consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse"))
articles$text <- as.character(articles$text)

# Sample vector of keywords or phrases
keywords <- as.character(c("elit", "tempor incididunt", "reprehenderit"))

#   id                                                                         text
# 1  1     Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
# 2  2 tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
# 3  3      quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
# 4  4    consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse

Angesichts des Vektors der Schlüsselwörter sollte die Teilmenge die Zeilen 1, 2 und 4 enthalten, da diese Zeilen eines oder mehrere der Elemente des Vektors enthalten.

Weder%in Nochgrepl() arbeiten seit%in% scheint zu erfordern, dass jedes Wort im Datenrahmen vektorisiert wird (articles$text %in% keywords ergibt vierFALSEs) undgrep() scheint nicht in der Lage zu sein, vektorisierte Muster zu verarbeiten (grep(keywords, articles$text) gibt einen Fehler aus). Keine der Funktionen alleine scheint über mehrere Dimensionen hinweg gut zu funktionieren (d. H. Es wäre einfach, in allen Zeilen nach einem Wort zu suchen, aber nicht alle 3 gleichzeitig).

Was ist der beste Weg, um alle Zeilen des Datenrahmens zu finden und auszuwählen, die mindestens eines der Elemente des Schlüsselwortvektors enthalten?

Antworten auf die Frage(1)

Ihre Antwort auf die Frage