2016-03-29 10 views
-3

Ich habe eine Daten wie unten und müssen Text extrahieren kommt vor jeder Nummer. oder wenn wir den Text und Nummer trennen kann dann wäre es toll,extrahieren Sie Text aus alphanumerischen Vektor in R

df<-c("axz123","bww2","c334") 

Ausgang

"axz", "bww", "c" 

oder

"axz","bww","c" 
"123","2","334" 
+0

Siehe 'Hilfe verwendet werden ("regmatches")'. – Roland

Antwort

2

Wir tun können:

df <- c("axz123","bww2","c334") 
gsub("\\d+", "", df) 
#[1] "axz" "bww" "c" 
gsub("(\\D+)", "", df) 
#[1] "123" "2" "334" 

Für Ihr weiteres Beispiel:

df <- "BAILEYS IRISH CREAM 1.75 LITERS REGULAR_NOT FLAVORED" 
gsub("\\d.*", "", df) 
#[1] "BAILEYS IRISH CREAM " 
gsub("[A-Z_ ]*", "", df) 
#[1] "1.75" 
+0

Danke Alot..es hat funktioniert.kann ich dich um Fieber bitten? wo ich diesen Trick auf gsub() lernen kann. wie wenn man "D +" oder "d" usw. benutzt, weil ich häufig auf ähnliche Probleme stoße. Danke :) – Nts

+0

Lesen Sie den helpppage über 'regex' und machen Sie viele Übungen. – jogo

2

Wir können [:alpha:] verwenden, um die Buchstaben zu entsprechen, und kombinieren diese mit gsub() und eine Negation, um alle Zeichen zu entfernen, die nicht alphabetisch sind:

Um nur die nicht-alphabetische Zeichen erhalten wir die Negation fallen kann ^:

gsub("[[:alpha:]]", "", df) 
#[1] "123" "2" "334" 
+0

Dank für Ihre Eingabe ist es schnell, aber das Problem ist ein bisschen schwierig, ich habe Daten wie "BAILEYS IRISH CREME 1,75 LITERS REGULAR_NOT FLAVORED" und die benötigte Ausgabe ist "BAILEYS IRISH CREAM" und "1,75". Entschuldigung für die Verwirrung. – Nts

+3

@NitinPatil Das sollte eine andere Frage sein. Bitte poste kein einfaches Beispiel und erwarte von anderen, dass sie Antworten auf deine komplexen Daten geben. Auch in der neuen Zeichenfolge gibt es Leerzeichen. Also, ganz andere Frage. – akrun

+1

@akrun: Ich entschuldige mich für die Verwirrung, ich habe nur versucht, das Zeug zu vereinfachen – Nts

1

Mit str_extract und Regex Lookarounds. Wir passen ein oder mehrere Zeichen vor jeder Zahl an ((?=\\d)) und extrahieren sie.

library(stringr) 
str_extract(df, "[[:alpha:]]+(?=\\d)") 
#[1] "axz" "bww" "c" 

Wenn wir die numerische und nicht-numerische trennen müssen, können strsplit

lst <- strsplit(df, "(?<=[^0-9])(?=[0-9])", perl=TRUE)