2016-06-15 13 views
2

Ich renne durch einen Zeichenvektor (ca. 10.000 Einträge) und es hat eine Menge Informationen darin Ich möchte verwerfen, aber ziemlich viel, das ich behalten möchte . Die Informationen, die ich behalten möchte, müssen einer gegebenen Zeichenfolge in einem anderen Zeichenvektor entsprechen. Also, wäre dies der matching_points Vektor, der die Argumente enthält, die die Kriterien erfüllen:R - invertieren gsub: keep nur Übereinstimmungen mit gsub Argument

matching_points <- "house|techno|pop|jazz|dreampop|artrock" 

und dies wäre der Vektor i wollen würde, um aufzuräumen:

music <- c("tropical house", "tech house", "funk", "hardcore", "hard rock", "pop", "dream pop", "free jazz") 

und durch den Reinigungsvorgang , würde ich den Vektor wollen music dann diese aussehen

[1] "house" "house" "" "" "" "pop" "pop" "jazz" 

Es wäre toll, wenn jemand eine Ahnung, wie ich das tun kann - ich vermute, es ist eine einfache o ption, die auf den -Prozess angewendet werden kann, um den Prozess umzukehren, d. h. das Material, das übereinstimmt, zu ersetzen und alles andere durch "" zu ersetzen.

+0

'regmatches (Musik, RegExpr (matching_points, Musik))' arbeitet fast ... nicht sicher, wie man am besten die "" s zu erhalten. – Frank

+0

Hm, ich denke, die verknüpfte Antwort deckt es ab. Lass es mich wissen, wenn nicht. – Frank

+1

Hallo @Frank, danke für deine Hilfe. Sotos Methode hat perfekt funktioniert. – nikUoM

Antwort

4

Sie können stringr versuchen,

library(stringr) 
str_extract(music, matching_points) 
#[1] "house" "house" NA  NA  NA  "pop" "pop" "jazz" 
+1

genial, das hat funktioniert! ich danke dir sehr! – nikUoM