Как оптимизировать циклы for в R - PullRequest
1 голос
/ 04 октября 2019

Я пытаюсь перебрать столбец большой таблицы с более чем 1 миллионом записей. Следующий цикл for занимает около 12 часов, чтобы выполнить в настоящее время, что слишком много. Я слышал о заявлениях о применении, которые более эффективны, однако я еще не пробовал. В основном набор данных выглядит следующим образом:

patient_id  date       enrolled_date
101        2018-03-02  2016-02-09
101        2018-06-23  2016-09-14
101        2018-01-19  NA
102        2017-04-20  2017-09-11
102        2017-06-15  NA

Выходные данные должны выглядеть следующим образом:

patient_id   date        enrolled_date
101        2018-03-02  2016-02-09
101        2018-06-23  2016-09-14
101        2018-01-19  2018-01-19
102        2017-04-20  2017-09-11
102        2017-09-05  NA

Логика: для пациента 101 третья запись имеет дату: 2018-01-19, и это, очевидно, на 30 дней больше, чем max (предыдущие записи enrolled_date) = 2016-09-14 для одного и того же пациента, поэтому NA была заменена на соответствующее значение даты. Однако для пациента 102 для второй записи значение в столбце даты составляет <30 дней от предыдущей записи зарегистрированной даты для того же пациента, поэтому оно останется только NA. </p>

for(i in 2:nrow(df)){

  x <- df$patient_id[i]
  df_1 <- df[df$patient_id==x,]
  for( j in 1:nrow(df_1)){

       df_1$enrolled_dt[j] <- as.Date(ifelse(df_1$date[j]- max(df_2$enrolled_dt[1:j-1],na.rm = TRUE)>30,df_2$date[j],NA),origin="1970-01-01") 


   }


  df[which(df$patient_id==x),"enrolled_dt"]<- df_1[,"enrolled_dt"]
}

Было бы здорово, если бы кто-то мог помочь мне здесь. Заранее спасибо.

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