Leapfrogging von einer vorherigen Frage, habe ich Probleme mit der richtigen Reg-Ausdruck-Syntax, um ein bestimmtes Wort zu isolieren.Extrahieren eines bestimmten Wortes mit Gsub und Regex
Bei einem Datenrahmen:
DL<-c("Dark_ark","Light-Lis","dark7","DK_dark","The_light","Lights","Lig_dark","D_Light")
Col1<-c(1,12,3,6,4,8,2,8)
DF<-data.frame(Col1)
row.names(DF)<-DL
Ich suche Extrakt alle „Dark“ und „Light“ (ohne Berücksichtigung vs kleingeschrieben obere) aus den Zeilennamen und eine zweite Spalte nur das enthalten, machen string "Dark" oder "Light"
Col2<-c("Dark","Light","dark","dark","light","Light","dark","Light")
DF$Col2<-Col2
Col1 Col2
Dark_ark 1 Dark
Light-Lis 12 Light
dark7 3 dark
DK_dark 6 dark
The_light 4 light
Lights 8 Light
Lig_dark 2 dark
D_Light 8 Light
Ive verändert die ursprünglichen Daten ein wenig zum Detail meine aktuellen Ausgabe, sondern eine ausgezeichnete Antwort von Tyler Rinker arbeiten, habe ich dieses:
DF$Col2<-gsub("[^dark|light]", "", row.names(DF), ignore.case = TRUE)
Aber die gsub wird auf einige der gemeinsamen Buchstaben gestolpert. Suchen Sie die Message-Boards für mit regex ein exaktes Wort zu isolieren, es sieht aus wie die Antwort mit doppeltem Schrägstrich zu verwenden, sollte entweder
\\<light\\>
oder
\\blight\\b
Warum also die Linie
DF$Col2<-gsub("[^\\<dark\\>|\\<light\\>]", "", row.names(DF), ignore.case = TRUE)
Nicht die gewünschte Spalte oben ziehen? Stattdessen bekomme ich
Col1 Col2
Dark_ark 1 Darkark
Light-Lis 12 LightLi
dark7 3 dark
DK_dark 6 DKdark
The_light 4 Thlight
Lights 8 Light
Lig_dark 2 Ligdark
D_Light 8 DLight
Niemand eine Regex Frage beantworten wenn es nicht [ssce] ist (http://sscce.org) – aaronman
Zuerst wird '\\ b' zum Definieren von Wortgrenzen verwendet. Sie müssen also sagen, was genau die Zeichenfolge dazwischen ist. Du kannst es nicht negieren. Zweitens benutzt es Leerzeichen und Interpunktionen, um Grenzen zu finden ... und '_' gehört nicht dazu. – Arun