Для проекта, над которым я работаю, мне нужен блок данных, чтобы указать, отсутствовал ли человек (0) или нет (1) в определенный день.
Проблема в том, что мои данныев формате, где указывается начальная дата отсутствия, а затем число дней, в течение которых человек отсутствовал.
Пример моего фрейма данных:
df1 <- data.frame(Person = c(1,1,1,1,1),
StartDate = c("01-01","02-01","03-01","04-01","05-01"),
DAYS = c(3,NA,NA,NA,1))
Вместо «Дата начала»и «количество дней отсутствия» на человека, оно должно выглядеть следующим образом:
df2 <- data.frame(Person = c(1,1,1,1,1),
Date = c("01-01","02-01","03-01","04-01","05-01"),
Absent = c(1,1,1,0,1))
Пока я решил это с помощью цикла for с двумя условиями if:
for(i in 1:nrow(df1)){
if(!is.na(df1$DAYS[i])){
var <- df1$DAYS[i]
}
if(var > 0){
var <- var-1
df1$DAYS[i] <- 1
}
}
Это работает, однако у меня тысячи людей с полными годами дат, что означает, что у меня более 5 миллионов строк в моем фрейме данных.Вы можете представить, насколько медленный цикл.
Кто-нибудь знает более быстрый способ решения моей проблемы?Я попытался посмотреть на пакет lubridate для работы с периодами и датами, но не вижу там решения.