2017-06-07 7 views
-2

Ich versuche, das Alter (numerische Werte) von einem Vektor zu extrahieren, tryied folgendes aber vermöge arbeiteteNumerische Werte in R (von Freitext) Extrahierung

Beispiel: -

a <- "age-32 agge32 age 45 aage 56 agee 34" 
    b <- gsub("[Aa]g.e?"," age ",a) 
    sa <- strsplit(x=b, split="\\s") 
    age <- stringr::str_extract(sa, "(age?)(\\s[^\\s]+){1}") 
    (or) 
    age <- grep("(([^\\s]+\\s){0}(age)(\\s[^\\s]+){1})",sel,value = TRUE) 
+0

Wenn Sie alle Zahlen extrahieren möchten, versuchen Sie 'str_extract_all (a," \ \ d + ")'. – Lamia

+0

Danke für das frühere Update, aber der freie Text enthält tatsächlich andere Ziffern wie Datum, Adresse eines Ortes, Pincode etc ... Ich möchte das Alter (Ziffern) extrahieren, dem das Zeichen wie "Alter | agge | Alter- | Alter | Alter "Beispiel: - ein <-" Alter-32 Alter32 Alter 45 Alter 56 Alter 34 24-06-2015 DoorNo1,27/7, 3. Straße, Wellington, Pin 2100067 " –

+0

Entschuldigung mein Fehler, die Anforderung ist. Ich möchte nur das Alter (Ziffern) extrahieren, dem der Charakter folgt wie "Alter | agge | Alter- | Alter | Alter" ein <- "Vater Alter-52 Mutter agge42 Sohn Alter 9 Tochter Alter 6 Adresse ist Tür 23 20002, Doc 26-07-1999 Pincode 260074 "> str_extract (str_extract_all (a," (?> Alter | agg). +? \ d + ") [[1]]," \\ d + ") Ausgabe: [1] NA NA NA NA Erwartete Ausgabe ist: 52 42 9 6 .. Brauchen Sie Hilfe auf –

Antwort

1

Ist das, was man wollte:

library(stringr) 

as.numeric(str_extract_all(a,"\\d+")[[1]]) 

OR mit gregexpr und regmatchesBASE R:

as.numeric(regmatches(a,gregexpr("\\d+",a))[[1]]) 

OR verwenden grep und strsplit in BASE R:

as.numeric(grep("\\d+",strsplit(a,split=" |-|[a-zA-Z]")[[1]],value=T)) 

Ausgang:

[1] 32 32 45 56 34 
+0

Dank für t er früher aktualisieren, aber eigentlich enthält der Freitext andere Ziffern wie Datum, Adresse eines Ortes, Pincode etc ... Ich möchte das Alter (Ziffern) extrahieren, die von dem Zeichen wie folgt "Alter | agge | age - | agee | Age“ Beispiel: - a <- "Alter-32 agge32 Alter 45 aage 56 agee 34 24-06-2015 DoorNo1,27/7, 3. Straße, Wellington, Stift 2100067" –

+0

@BalajiS, ein bescheidener Bitte, wenn du eine Frage stellst, lege alles hinein, wie würde ich wohl annehmen, dass deine Daten Datum haben usw. Du hast es dort noch nie erwähnt, jetzt ist diese Frage schon für geschlossen entschieden, auch jemand wollte nicht helfen können um dir zu helfen. Gemäß Ihrer Lösung können Sie dies versuchen: 'library (stringr); str_extract (str_extract_all (a, "(?> age | agg). \\ d +") [[1]], "\\ d +") ', Dies sollte mit der angegebenen Zeichenfolge in Ihrem Kommentar arbeiten. Falls diese Lösung funktioniert, markieren Sie die Antwort bitte mit dem grünen Häkchen als akzeptiert. – PKumar

+0

@BalajiS 'library (stringr)'; 'str_extract (str_extract_all (a," (?> age | agg). +? \\ d + ") [[1]]," \\ d + ")', Falls Sie eine andere Schreibweise für das Alter haben, fügen Sie eine beliebige Version hinzu Alter wollten Sie den Lookaround-Ausdruck getrennt mit Pipe Delimeter einfügen. – PKumar

Verwandte Themen