Как определить выходные и автоматически вычесть их из моей разницы во времени в R

Я пишу код, который использует два вектора временных меток, чтобы дать мне время, необходимое для определенного процесса (просто difftime).

Но на выходных время должно быть на привале. Так что, если продукт поступает в пятницу и отправляется во вторник, я должен вычесть время выходного дня. Поэтому мне нужна возможность определить, когда время обработки продуктов проходит через выходные, выходные автоматически вычитаются из разницы во времени.

Идентификация этих продуктов представляет собой большую проблему, чем их вычитание.


person Ernsthaft    schedule 30.07.2018    source источник


Ответы (2)


Используйте is.weekend из пакета chron.

days<-seq.Date(as.Date("01-01-2017",format= "%d-%m-%Y"),as.Date("01-04-2017",format= "%d-%m-%Y"),by = "days")   
library(chron)  
  days[is.weekend(days)]
  [1] "2017-01-01" "2017-01-07" "2017-01-08" "2017-01-14" "2017-01-15" "2017-01-21" "2017-01-22"
  [8] "2017-01-28" "2017-01-29" "2017-02-04" "2017-02-05" "2017-02-11" "2017-02-12" "2017-02-18"
 [15] "2017-02-19" "2017-02-25" "2017-02-26" "2017-03-04" "2017-03-05" "2017-03-11" "2017-03-12"
 [22] "2017-03-18" "2017-03-19" "2017-03-25" "2017-03-26" "2017-04-01"

  weekdays.Date(days[is.weekend(days)])
  [1] "Sunday"   "Saturday" "Sunday"   "Saturday" "Sunday"   "Saturday" "Sunday"   "Saturday"
  [9] "Sunday"   "Saturday" "Sunday"   "Saturday" "Sunday"   "Saturday" "Sunday"   "Saturday"
 [17] "Sunday"   "Saturday" "Sunday"   "Saturday" "Sunday"   "Saturday" "Sunday"   "Saturday"
 [25] "Sunday"   "Saturday"
person Iman    schedule 30.07.2018

Здесь может помочь функция weekdays:

weekdays(as.Date("2018-07-30"))
# [1] "monday"

Итак, если вы передадите объект вектора дат, вы сможете идентифицировать субботу и воскресенье.

Например:

which(weekdays(as.Date(c("2018-07-30", "2018-07-29", "2018-07-28", "2018-07-27"))) %in% c("saturday", "sunday"))
[1] 2 3
person RLave    schedule 30.07.2018