私は2つのデータフレーム、病院滞在の1つとラボ結果のもう1つを持っています。私は、どの病院が検査結果を保持しているのかを特定し、病院のデータフレームから入院と退院日を関連する検査結果の行にコピーする必要があります。2つのデータフレームからデータをリンクする効率を向上させます
私は、実験室の結果を歩くためにforループを使用しています。そして、病院の記録に一致するエントリ(患者のSSNと周囲の日付で)を探すステートメントとサブセットがあります。
これは非常に大きなデータセットであり、forループを使用すると非常に遅くなります。この種の問題をスピードアップする方法はありますか? (私はいくつかの同様の問題があるので、答えが大好きです。)
サンプルデータが追加されました。日付がラボの日付と重複しているレコードから日付を取得することを目標にして、 。この例では、患者2に病院データがなく、患者3の記録が検査日と重複しないので、得られたデータフレームは患者1の入院および退院日のみを有するべきである。
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
}
所望のデータフレームは、次のようになります。
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
お知らせ、実際のデータでは、(部門間の放電)を修飾する複数の病院の記録の問題もあるこれらのレコードは同じを持っているでしょう入学日は異なりますが、最新のものとは異なる排出時間が重要です。しかし、最初のものは最初に... dplyr::left_join
を使用し、これはあなたのDFがどのように見えるかに似ていると仮定すると、
サンプルデータを表示して、どのような出力が期待できますか?他の人があなたを適切に支援するのに役立ちます。 – Sagar
'dplyr'の' join'関数を使って2つのデータフレームをマージしようとします。サンプルデータを再現すれば、それを手助けすることができます。 – sweetmusicality
サンプルデータが提供されています。日付の問題を認識できないため、マージは機能しません。 – rwbuie