2017-09-13 3 views
1

ich die folgende Zeichenfolge in R haben:R extrahieren maximale Anzahl nach bestimmten Teilzeichen

str <- "number_123 some text number_4" 

Nun, ich die Nummern 123 und 4 in den Vektor der Numerik extrahieren möchten. Ich war jedoch nicht in der Lage, einen regulären Ausdruck zu finden, um die Nummern 123 und 4 zu identifizieren. Der einzige Bezeichner in diesem Problem ist "Nummer_". Ich möchte die folgende Zahl extrahieren, die von 1 bis 3 Zahlen sein kann.

Ich habe hier einige reguläre Ausdrücke für einige ähnliche Probleme gefunden. Ich konnte es jedoch nicht so ändern, dass es zu meinem Problem passt.

Danke für Ihre Hilfe!

Edit: sorry nicht genauer sein. Der eigentliche String sieht wie folgt aus:

str <- '\"number_123\"somtext 123 some more text\"number_1\" text' 

Wie zuvor Ich mag würde die Zahlen nach der Teilkette \ "-Nummer extrahieren leider alle Ihre Lösungen hat nicht funktioniert Ich habe die folgende Warnmeldung angezeigt:..

NAs introduced by coercion 
+0

Was ist der Code, den Sie haben? Was hat nicht funktioniert? Was ist das * Problem * mit deinem * Code *? –

+0

Dieser 'Regex' sollte es tun. 'library (stringr)' 'str_extract_all (str," \\ d {1,3} \\ b ")'. – Sagar

+0

siehe meinen editierten Beitrag. ich hoffe ich bin jetzt genauer. – Rnewbie

Antwort

0

hässlich, aber funktioniert:

foo <- "number_123 some text number_4" 
as.numeric(gsub("number_", "", grep("number_", unlist(strsplit(foo, " ")), value = TRUE))) 

Lesbare Lösung mit Rohr:

library(magrittr) 
'\"number_123\"somtext 123 some more text\"number_1\" text' %>% 
    strsplit(" ") %>% # Split character string per space 
    unlist() %>% 
    grep("number_", ., value = TRUE) %>% # Extract "words" with number_ 
    gsub("number_", "", .) %>% # Remove "number_" part 
    gsub('"', "", .) %>% # Remove "number_" part 
    gsub("[a-z]", "", .) %>% # Remove "number_" part 
    as.numeric() # Turn into numbers 

[1] 123 1 
+0

siehe meinen editierten Beitrag. ich hoffe ich bin jetzt genauer. Ich habe die Warnmeldung wie oben gezeigt bekommen. Ich erhielt nur NA's anstelle der tatsächlichen Zahlen. – Rnewbie

+0

@Rnewbie Ich habe meine Antwort bearbeitet – PoGibas

Verwandte Themen