Я пытаюсь перебрать столбец большой таблицы с более чем 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"]
}
Было бы здорово, если бы кто-то мог помочь мне здесь. Заранее спасибо.