Мне было интересно, есть ли способ выполнить это смещение строк без al oop в R? У меня есть данные с машины, которая выполняет последовательные задания различной длины. Я хочу сдвинуть данные так, чтобы в выходные дни не выполнялось никакой работы
Данные до сдвига
Date Job
1 2019-12-1 Job1
2 2019-12-2 Job1
3 2019-12-3 Job2
4 2019-12-4 Job2
5 2019-12-5 Job2
6 2019-12-6 Job3
7 2019-12-7 Job3
8 2019-12-8 NA
9 2019-12-9 NA
10 2019-12-10 NA
Данные после сдвига
Date Job Day_Of_Week
1 2019-12-01 NA Sunday
2 2019-12-02 Job1 Monday
3 2019-12-03 Job1 Tuesday
4 2019-12-04 Job2 Wednesday
5 2019-12-05 Job2 Thursday
6 2019-12-06 Job2 Friday
7 2019-12-07 NA Saturday
8 2019-12-08 NA Sunday
9 2019-12-09 Job3 Monday
10 2019-12-10 Job3 Tuesday
Скрипт :
data=data.frame(
Date=c("2019-12-1","2019-12-2","2019-12-3","2019-12-4","2019-12-5","2019-12-6","2019-12-7","2019-12-8","2019-12-9","2019-12-10"),
Job=c("Job1","Job1","Job2","Job2","Job2","Job3","Job3",NA,NA,NA)
)
data$Date <- as.Date(data$Date, "%y-%m-%d")
data$Day_Of_Week<- weekdays(as.Date(data$Date))
data$Job<-as.character(data$Job)
lower_data<-NA
upper_data<-NA
for ( row in 1:nrow(data)){
if(data[row,"Day_Of_Week"] %in% c('Saturday','Sunday')){
if(row>1){
upper_data <- data[1:row-1,]
lower_data <- data[row:nrow(data),]
lower_data <- transform(lower_data, Job = c(NA, Job[-nrow(lower_data)]))
lower_data$Date<- as.Date(lower_data$Date, "%y-%m-%d" )
data<-rbind(upper_data,lower_data)
}else{
data <- transform(data, Job = c(NA, Job[-nrow(data)]))
data$Date<- as.Date(data$Date, "%y-%m-%d" )
}
}
}
View(data)