Fehlende (Leerzeichen) in einer Datentabelle nach Kategorie ausfüllen - vorwärts und rückwärts

Ich arbeite mit einem großen Datensatz vonAbrechnungsunterlagen für meine klinische Praxis über 11 Jahre. In einigen Zeilen fehlt der überweisende Arzt. Unter Verwendung einiger Regeln kann ich sie jedoch recht einfach ausfüllen, weiß aber nicht, wie ich sie in data.table unter R implementieren soll. Ich weiß, dass es Dinge wiena.locf Im Zoo-Paket und Self-Rolling werden im data.table-Paket zusammengeführt. Die Beispiele, die ich gesehen habe, sind zu simpel und helfen mir nicht.

Hier sind einige fiktive Daten zur Orientierung (als Dput-ASCII-Textdarstellung)

    structure(list(patient.first.name = structure(c(1L, 1L, 1L, 1L, 
1L, 2L, 2L, 2L, 2L, 2L, 3L, 3L, 3L, 3L), .Label = c("John", "Kathy", 
"Timothy"), class = "factor"), patient.last.name = structure(c(3L, 
3L, 3L, 3L, 3L, 2L, 2L, 2L, 2L, 2L, 1L, 1L, 1L, 1L), .Label = c("Jones", 
"Martinez", "Squeal"), class = "factor"), medical.record.nr = c(4563455, 
4563455, 4563455, 4563455, 4563455, 2663775, 2663775, 2663775, 
2663775, 2663775, 3330956, 3330956, 3330956, 3330956), date.of.service = c(39087, 
39112, 39112, 39130, 39228, 39234, 39244, 39244, 39262, 39360, 
39184, 39194, 39198, 39216), procedure.code = c(44750, 38995, 
40125, 44720, 44729, 44750, 38995, 40125, 44720, 44729, 44750, 
44729, 44729, 44729), diagnosis.code.1 = c(456.87, 456.87, 456.87, 
456.87, 456.87, 521.37, 521.37, 521.37, 521.37, 356.36, 456.87, 
456.87, 456.87, 456.87), diagnosis.code.2 = c(413, 413, 413, 
413, 413, 532.23, NA, NA, NA, NA, NA, NA, NA, NA), referring.doctor.first = structure(c(1L, 
1L, 1L, 1L, 1L, 2L, 2L, 2L, NA, NA, NA, 1L, 1L, NA), .Label = c("Abe", 
"Mark"), class = "factor"), referring.doctor.last = structure(c(1L, 
1L, 1L, 1L, 1L, 2L, 2L, 2L, NA, NA, NA, 1L, 1L, NA), .Label = c("Newstead", 
"Wydell"), class = "factor"), referring.docotor.zip = c(15209, 
15209, 15209, 15209, 15209, 15222, 15222, 15222, NA, NA, NA, 
15209, 15209, NA), some.other.stuff = structure(c(1L, 1L, 1L, 
NA, 3L, NA, NA, 4L, NA, 6L, NA, 2L, 5L, NA), .Label = c("alkjkdkdio", 
"cheerios", "ddddd", "dddddd", "dogs", "lkjljkkkkk"), class = "factor")), .Names = c("patient.first.name", 
"patient.last.name", "medical.record.nr", "date.of.service", 
"procedure.code", "diagnosis.code.1", "diagnosis.code.2", "referring.doctor.first", 
"referring.doctor.last", "referring.docotor.zip", "some.other.stuff"
), row.names = c(NA, 14L), class = "data.frame")

Die naheliegende Lösung besteht darin, einen LOCF-Algorithmus (Last-Carry-Forward) für refering.doctor.last und refering.doctor.first zu verwenden. Es muss jedoch aufhören, wenn es zu einem neuen Patienten kommt. Mit anderen Worten, der LOCF darf nur auf einen Patienten angewendet werden, der durch die Kombination von Patient.Vorname, Patient.Alt.Name, Krankenakte.Nr. Beachten Sie auch, dass einige Patienten bei ihrem ersten Besuch den überweisenden Arzt vermissen, sodass einige Beobachtungen durchgeführt werden müssenrückwärts. Aus Komplikationsgründen wechseln einige Patienten die Hausärzte, so dass es möglicherweise einen überweisenden Arzt früher und einen späteren später gibt. Der Alogorithmus muss daher die Datumsreihenfolge der Zeilen mit fehlenden Werten kennen.

Im Zoona.locf Ich sehe keine einfache Möglichkeit, den LOCF pro Patient zu gruppieren. Die Beispiele für fortlaufende Verknüpfungen, die ich gesehen habe, würden hier nicht funktionieren, da ich die Zeilen mit den fehlenden refering.doctor-Informationen nicht einfach herausnehmen kann, da ich dann das Datum des Service und den procedure.code usw. verlieren würde. Ich würde mich freuen, wenn Sie mir dabei helfen, wie R meine fehlenden Daten ergänzen kann.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage