Я пытаюсь определить соответствие пациента определенному медицинскому лечению, но функция, которую я написал (использую, применяется), работает только для фреймов данных с менее чем ~ 100 строками.
У меня есть два соответствующих кадра данных, которые я уменьшил здесь, чтобы защитить данные пациента:
«Рекомендация», которая содержит рекомендации по лечению, индексируемые уникальным идентификационным номером пациента (UID)
> head(Advice)
# A tibble: 6 x 4
# Groups: UID [3]
UID eyepartid Proctype entereddatetime
<dbl> <chr> <chr> <dttm>
1 11556127 1 Retina Laser 2017-06-14 12:54:18
2 11556127 2 Retina Laser 2017-06-14 12:54:18
3 2680380 2 Retina Laser 2017-06-14 10:40:22
4 2680380 1 Retina Laser 2017-06-14 10:40:22
5 11275381 2 Retina Laser 2017-06-14 13:01:04
6 11275381 1 Retina Laser 2017-06-14 13:01:04
и «Обработки», содержащие записи о том, когда пациенты действительно приходили за рекомендованным лечением, а также индексируются по UID.
>head(Treatment)
# A tibble: 6 x 4
UID eyepartid lasertype entereddatetime
<dbl> <dbl> <chr> <dttm>
1 11333944 1 Retina Laser Laser Type 2017-04-21 12:42:49
2 12022346 1 Yellow 2017-11-01 09:18:42
3 12123496 2 Green 2017-11-20 16:11:43
4 12291214 1 Yellow 2017-12-23 10:21:45
5 11005906 2 Yellow 2017-12-23 13:13:48
6 12341193 2 Green 2018-01-19 09:12:26
В качестве очень приблизительной оценки, первый анализ, который я хотел сделать, состоял в том, чтобы увидеть, сколько раз пациенты приходили в течение 30 дней после консультации с врачом для лечения (так как большинство советов предполагает 3 процедуры).
Для достижения этой цели я использовал этот простой и, вероятно, неэффективный алгоритм для добавления нового столбца во фрейм данных рекомендации:
Advice$treatments <- apply(Advice, 1,
function(x) {
# get date of the advice entry
AdvisedDay <- x["entereddatetime"]
# take the subset of Treatment that has the correct UID and is within 30 days
## of the advice entry
TreatSubset <- filter(UID_Treatment, UID == x["UID"],
(difftime(Treatment$entereddatetime, AdvisedDay, units = "days") <= 30))
#return the number of rows in TreatSubset
nrow(TreatSubset)
})
С чем я борюсь, так это с тем, что этот алгоритм отлично работает, когда я вызываю его на head(Advice)
или любой фрагмент фрейма данных Advice <100 строк, но возвращает ноль для каждой строки, когда я вызываю его во всем фрейме данных Advice. </p>
Например:
adviceToy <- Advice[1:10, ]
* Запустите вышеуказанную функцию по adviceToy *
>adviceToy
# A tibble: 10 x 5
# Groups: UID [7]
UID eyepartid Proctype entereddatetime treatments
<dbl> <chr> <chr> <dttm> <int>
1 11556127 1 Retina Laser 2017-06-14 12:54:18 3
2 11556127 2 Retina Laser 2017-06-14 12:54:18 3
3 2680380 2 Retina Laser 2017-06-14 10:40:22 0
4 2680380 1 Retina Laser 2017-06-14 10:40:22 0
5 11275381 2 Retina Laser 2017-06-14 13:01:04 1
6 11275381 1 Retina Laser 2017-06-14 13:01:04 1
7 11557272 3 Retina Laser 2017-06-14 14:22:53 2
8 11492720 2 Retina Laser 2017-06-14 13:04:41 2
9 11030362 3 Retina Laser 2017-06-14 15:27:36 2
10 11244084 3 Retina Laser 2017-06-14 17:06:16 0
Какой ожидаемый результат. Но ... * * 1023
* теперь запускаем функцию на фрейме полной информации *
* нет предупреждающих сообщений *
>Advice
# A tibble: 6 x 5
# Groups: UID [3]
UID eyepartid Proctype entereddatetime treatments
<dbl> <chr> <chr> <dttm> <int>
1 11556127 1 Retina Laser 2017-06-14 12:54:18 0
2 11556127 2 Retina Laser 2017-06-14 12:54:18 0
3 2680380 2 Retina Laser 2017-06-14 10:40:22 0
4 2680380 1 Retina Laser 2017-06-14 10:40:22 0
5 11275381 2 Retina Laser 2017-06-14 13:01:04 0
6 11275381 1 Retina Laser 2017-06-14 13:01:04 0
Эта же функция теперь возвращает все нули для процедур.
Есть мысли о том, что может быть причиной этой проблемы?
Примечание: я уже очистил данные от любых значений NA или NULL
Редактировать: добавлен пример кода. Кроме того, я заметил, что к моему фрейму данных Advised прикреплены некоторые атрибуты