2016-04-14 3 views
0

Ich muss entweder eine Möglichkeit finden, dies zu rekodieren, um verfälschte Versionen von Patienten einzubinden, oder diejenigen, die davon nicht betroffen sind, "markieren".Ich muss diesen Code überarbeiten, damit er alles enthält, was "stationär" gelesen werden könnte - auch wenn es falsch geschrieben ist?

df1$Admission_Type <- as.character(df1$Admission_Type) 
df1$Admission_Type[df1$Admission_Type == "Inpatient"]<-"ip" 
df1$Admission_Type[df1$Admission_Type == "inpatient"]<-"ip" 
df1$Admission_Type[df1$Admission_Type == "INPATIENT"]<-"ip" 

Es wiederholt sich so.

+2

'df $ Admission_Type [Grepl ("stationäre", df1 $ Admission_Type, ignore.case = TRUE)] = "ip"' werden die Fälle decken Sie aufgelistet. Sie können Schecks für häufige Rechtschreibfehler hinzufügen, wenn Sie wissen, was sie sind. – eipi10

+3

Für Rechtschreibfehler siehe 'agrep'. – alistaire

Antwort

1

mit Fall Probleme zu behandeln, die alle

df1 <- data.frame(Admission_Type = c("Inpatient", "inpatient", "INPATIENT", "inp", "impatient"), stringsAsFactors = FALSE) 
df1$Admission_Type <- tolower(df1$Admission_Type) 

Dann können Sie reguläre Ausdrücke in Kleinbuchstaben umwandeln verwenden, um mit Rechtschreibfehler zu behandeln. Obwohl es unmöglich ist, alles zu bekommen, können Sie Intuition verwenden, um sich zu nähern. In meinem Beispiel habe ich den (beabsichtigten) Rechtschreibfehler von "ungeduldig" gemacht. Sie können einen regulären Ausdruck dies möglicherweise häufiger Fehler als solche

grep("^i[nm]pat[ie][ei]nt", df1$Admission_Type, ignore.case = TRUE) 

zu detektieren eingerichtet, wo I die zweite Position entweder ein ‚n‘ oder ‚m‘, oder die ‚dh‘ sein darf an Positionen zu schalt 6-7. Dies gibt

[1] 1 2 3 5 

Sie falsch geschriebene Briefe an jeder Position wahrscheinlich möglich hinzufügen. Es gibt viele Tipps, wie Sie diese Regex komplizierter gestalten können, um fehlende/zusätzliche Buchstaben bei der Suche zu berücksichtigen.

Hinweis Sie können gsub verwenden, um den Austausch automatisch durchzuführen.

+0

alles, was Sie brauchen, ist '"^i [nm] Patient "' – rawr

+0

Wahr, aber erlaubte Rechtschreibfehler an zusätzlichen Positionen. Zum Beispiel, wenn i und e häufig umgeschaltet werden, [dh] [ei]. 'Agrep' scheint sowieso der bessere Ansatz zu sein. – JohnSG

+0

@rawr Punkt genommen. bearbeitet. – JohnSG

1

df1$Admission_Type[grepl("inpatient", df1$Admission_Type, ignore.case=TRUE)] = "ip" deckt die Fälle, die Sie aufgelistet haben. @ JohnSGs Antwort zeigt, wie auch mögliche Rechtschreibfehler in den regulären Ausdruck einbezogen werden können. (Sie sollten wahrscheinlich eine neue Spalte erstellen, um Ihre Aufzeichnungen zu speichern (zumindest während Sie verschiedene Optionen testen), anstatt die ursprüngliche Datenspalte zu überschreiben.)

Als @alistaire erwähnt, können Sie agrep verwenden für ungefähre Übereinstimmung. Zum Beispiel:

x = c("inpatient","Inpatient","Impatient","inpateint") 

agrep("inpatient", x, max.dist=2, ignore.case=TRUE) 

Also, in Ihrem Fall könnten Sie tun:

df1$Admission_Type[agrep("inpatient", df1$aAdmisstion_Type, max.dist=2, ignore.case=TRUE)] = "ip" 

agrep geben die Indizes des Anpassungswertes. max.dist steuert, wie unterschiedlich die tatsächlichen Werte vom Zielwert sein können und dennoch als Übereinstimmung betrachtet werden. Sie müssen dies wahrscheinlich testen und optimieren, um Fehlbuchungen zu erfassen und falsche Übereinstimmungen zu vermeiden.

grepl deckt die Fälle, die Sie in Ihren Fragen aufgelistet, sondern auch für die Zukunft, wenn Sie jemals auf einer Anzahl von separaten Werten übereinstimmen müssen, können Sie die Menge an Code mithilfe der %in% Funktion benötigt reduzieren. In Ihrem Fall, dass sein würde:

df1$Admission_Type[df1$Admission_Type %in% c("Inpatient","inpatient","INPATIENT")]<-"ip" 
Verwandte Themen