2016-07-21 23 views
0

Ich habe Krankenhausdaten, die konsistent sein müssen. Das erste numerische Zeichen ist die Etagennummer, die folgenden alphabetischen Zeichen sind das Akronym der Station und die letzten beiden numerischen Zeichen sind die Bettennummer.Zeichenketten in R - Leerzeichen zwischen ausgewählten Buchstaben und Ziffern einfügen

So 2EA 28 wäre Etage 2, Ward Osten und Bett 28.

Die Standorte wurden mit inkonsistenten Räumen, so dass ich habe folgendes eingetragen in:

toyraw<-data.table(incident_no = c(1:6), location =c("2EA17","2EA 17", "1ED1", "1ED23", "1ED 34","ICU24")) 

ich möchte es wie folgt aussehen

toyideal<-data.table(incident_no = c(1:5), location =c("2EA 17","2EA 17", "1ED 1", "1ED 23", "1ED 34", "ICU 24")) 

Wenn es keine numerische an der Front war, würde ich gerade aus dem numerischen sub und die Zeichen einer nach dem anderen, sondern weil es nummerisch, Zeichen numerisch ist es ein Problem. Es gibt 1462 Zeilen.

Weitere Komplikationen, Bodenstationen wie die Intensivstation haben keine vorhergehende Nummer.

Zugegeben als pro Anfrage - für Menschen lesbaren Namen

Menschen lesbaren Namen:

additional<-data.table(incident_no = c(1:5), location =c("2EA 17","2EA 17", "1ED 1", "1ED 23", "1ED 34"), 
        human_Readable = c("Ward 2 East Bed 17","Ward 2 East Bed 17", "Ward 1 Emergency Department 
             Bed 1", "Ward 1 Emergency Department Bed 23", "Ward 1 Emergency Department Bed 24", 
             "Ward ICU Bed 24")) 
+1

Beide Codes geben die gleichen Werte an. – user2100721

+0

Bitte geben Sie uns eine Tabelle für die Zuordnung von Akronymen zu lesbaren Namen. –

Antwort

1

Sie gsub() dafür verwenden können:

> gsub("(\\d*)(\\D*)\\s*(\\d*)", 
     "Floor \\1 Ward \\2 and Bed \\3.", 
     gsub(" ", "", "1ED 34")) 

[1] "Floor 1 Ward ED and Bed 34." 

Hier ist die regex ich verwendet:

(\\d*)(\\D*)\\s*(\\d*) 

Regex101

+0

Dies würde funktionieren, wenn die Krankenhausabteilung, die das Protokoll nennt, konsistent ist. Aber es verursacht einige Probleme, da die Namen der Krankenstationen selbst nicht vollständig konsistent sind und einige Stationen seltsame Akronyme haben. Idealerweise muss ich sicherstellen, dass rechts neben dem letzten numerischen Wert ein Leerzeichen steht. So wird ICU24 zur ICU 24. Grundsätzlich muss konsistent sein, damit ich mit dplyr Zählungen durchführen kann. – monkeyshines

+0

Ich habe die Regex so aktualisiert, dass sie auch für "ICU24" funktioniert, d. H. Falls es keine vorhergehende Nummer gibt. Regex funktioniert gut für feste Strukturen. Wenn es wirklich keine Regeln für die Namen gibt, ist Regex möglicherweise nicht das beste Werkzeug. –

+1

Das funktioniert gut, alle "Ausreißer" sind im Erdgeschoss. Wird dafür sorgen, dass Regex auf klar strukturierte Ausdrücke beschränkt wird. – monkeyshines