Quantcast
Channel: Active questions tagged r - Stack Overflow
Viewing all articles
Browse latest Browse all 206408

R -- Shift Multiple Rows in a Data Frame Without a Loop

$
0
0

I was wondering if there was any way to perform this shift of rows without a loop in R? I have data from a machine that performs sequential jobs of varied length. I want to shift the data so that there is no work being done on the weekend days

Data prior to shift

        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

Data After Shift

         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

Script:

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)

Viewing all articles
Browse latest Browse all 206408

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>