Ich habe zwei Datenrahmen, einer der Krankenhausaufenthalte, und der andere der Laborergebnisse. Ich muss identifizieren, in welchem Krankenhaus ein Laborergebnis gespeichert wird, und die Aufnahme- und Entlassungsdaten aus dem Krankenhausdatenrahmen in die Zeile für das relevante Laborergebnis kopieren.Verbessern Sie die Effizienz beim Verknüpfen von Daten aus zwei Datenrahmen
Ich mache dies mit einer for-Schleife, um durch die Laborergebnisse zu gehen, und dann, wenn Anweisungen und Untergruppen, die nach übereinstimmenden Einträge (von Patienten SSN und umgebenden Daten) in den Krankenakten suchen.
Dies ist ein ziemlich großer Datensatz und die Verwendung der For-Schleife ist sehr langsam. Gibt es eine Möglichkeit, diese Art von Problem zu beschleunigen? (Ich habe mehrere ähnliche Probleme, so würde eine Antwort lieben.)
Beispieldaten hinzugefügt, beachten Sie, dass es mehrere Krankenhaus Datensätze für jeden Patienten mit dem Ziel, die Daten aus dem Datensatz zu erhalten, wo die Daten das Labordatum überlappen . In diesem Beispiel sollte der resultierende Datenrahmen nur Aufnahme- und Entlassungsdaten für Patient 1 haben, da Patient 2 keine Krankenhausdaten hat und die Datensätze von Patient 3 das Labordatum nicht überlappen.
testDate <- as.Date(c("2017-01-15", "2017-01-15", "2017-01-15"))
patientSSN <- c("1","2","3")
labs <- data.frame(patientSSN, testDate)
# patientSSN testDate
# 1 1 2017-01-15
# 2 2 2017-01-15
# 3 3 2017-01-15
patientSSN <- c("1","1","3","3")
admissionDate <- as.Date(c("2017-01-07", "2017-02-01", "2016-12-01", "2017-01-16"))
dischargeDate <- as.Date(c("2017-01-16", "2017-02-10", "2016-12-15", "2017-02-01"))
hospitalRec <- data.frame(patientSSN, admissionDate, dischargeDate)
for (I in 1:nrow(labs)) {
labs[I,]$admissionDate <- hospitalRec[hospitalRec$patientSSN == labs[I,]$patientSSN & hospitalRec$admissionDate <= labs[I,]$testDate & hospitalRec$dischargeDate >= labs[I,]$testDate,]$admissionDate
labs[I,]$admissionDate <- hospitalRec[hospitalRec$PatientSSN == labs[I,]$PatientSSN & hospitalRec$admissionDate <= labs[I,]$testDate & hospitalRec$dischargeDate >= labs[I,]$testDate,]$dischargeDate
}
Der gewünschte Datenrahmen aussehen würde:
labs:
patientSSN testDate admissionDate dischargeDate
1 2017-01-15 2017-01-07 2017-01-16
2 2017-01-15 NA NA
3 2017-01-15 NA NA
Hinweis, in den realen Daten, gibt es auch das Problem von mehreren Krankenhausakten der Qualifikation (Entladungen zwischen Abteilungen) diese Aufzeichnungen würden das gleiche haben Aufnahmedatum, aber unterschiedliche Entladezeiten, wobei die letzte wichtig ist. Aber der Reihe nach ...
Könnten Sie bitte Beispieldaten zeigen, und was ist die erwartete Ausgabe? Es wird anderen helfen, Ihnen richtig zu helfen. – Sagar
versuchen, die beiden Datenrahmen mit 'dplyr'' Join'-Funktionen zusammenzuführen. Wenn Sie Beispieldaten reproduzieren, können wir Ihnen dabei helfen. – sweetmusicality
Beispieldaten zur Verfügung gestellt. Zusammenführen wird nicht funktionieren, da das Datumsproblem nicht erkannt wird. – rwbuie