Фильтр с условным сбоем поиска для больших данных - PullRequest
0 голосов
/ 02 июля 2018

Я пытаюсь определить соответствие пациента определенному медицинскому лечению, но функция, которую я написал (использую, применяется), работает только для фреймов данных с менее чем ~ 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 прикреплены некоторые атрибуты enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...