2017-06-22 3 views
0

Ich stecke mit einem Problem fest, das einfach sein sollte. Wahrscheinlich ein Regex-Problem. Ich bin ein Neuling. Bitte beachten Sie ein String-Vektor wie das:Mit str_extract_all nur die ersten beiden Wörter in R extrahieren?

species_location<-c('Homo_sapiens_Lausanne_Switzerland', 'Solenopsis_invicta_California_US', 'Rattus_novaborensis_Copenhagen_Denmark', 'Candida_albicans_Crotch_Home') 

ich mit einem neuen Vektor für die Spezies am Ende wollte, die wie folgt aussieht:

c(Homo_sapiens, Solenopsis_invicta, Rattus_novaborensis, Candida_albicans) 

Derzeit bin ich die folgende Funktion:

str_extract_all(species_location,'^(\\S+?)_(\\S+?)_') 

Allerdings gibt es die ersten 3 Wörter statt, wofür ich es entworfen habe. Ich kann nicht herausfinden warum. Bitte könnte jemand helfen und erklären? Danke

UPDATE: Für jeden, der vorbeikommt, funktioniert der Code, der oben eingegeben wird, wie es sollte, ausgenommen auf meiner R-Konsole für Mac OS 3.0.0, R.app 1.60. Ich weiß immer noch nicht, was das Problem ist, aber es könnte interessant sein, dass jemand anderes es überprüft. Ich werde versuchen, hier ein Bild hinzuzufügen. Unusual interpretation of regex

+2

verwende ich dies nicht wiedergeben kann, läuft Ihr Beispielcode ich die ersten zwei Worte der einzelnen Elemente erhalten (von einem nachgestellten gefolgt '_'). Sind Sie sicher, dass Ihr Beispielcode dem entspricht, was Sie ausgeführt haben? – Marius

+0

Wenn Sie positiv sein wollen, werden Sie nicht verrückt - und vermuten, dass mit Ihrem Lazy-Modifikator eine Art Magie passieren könnte, dann versuchen Sie Folgendes: '^ ([a-zA-Z] +) _ ([a -zA-Z] +) _ ' – Addison

+0

Das ist sehr seltsam !! Auf meiner Seite gibt es jedes Mal die ersten drei Wörter, ich habe so viele kleine Änderungen ausprobiert (zB mit {2})! .. – Scientist

Antwort

3

Sich einfach auf das stringr Paket verlassen.

library(stringr) 

species_location<-c('Homo_sapiens_Lausanne_Switzerland', 'Solenopsis_invicta_California_US', 'Rattus_novaborensis_Copenhagen_Denmark', 'Candida_albicans_Crotch_Home') 

word(species_location, 1,2, sep="_") 
+0

Am Ende gibt es anscheinend ein Verhalten bei der R-Version, siehe oben. Trotzdem markiere ich Ihre als die beste Lösung, da der Code so viel sauberer ist, was für mich später leichter zu verstehen ist. – Scientist

2

Wir str_extract

str_extract(species_location, "[^_]+_[^_]+") 
Verwandte Themen