Мне нужно создать функцию, которая будет возвращать следующие ближайшие рабочие дни.На сегодня (2019-07-09
) результат будет 2019-07-10
, так как завтра не деловой или выходной.В случае, если завтра будет выходной день, результат должен быть 2019-07-11
, но в случае, если этот день будет выходным / праздничным днем, результатом должен быть ближайший рабочий день.
Вот список местныхделовые каникулы.Между этими двумя днями в апреле - канун Пасхи, и даты меняются, но я исправлю это самостоятельно в будущем.
business_holidays <- c("01-01", "04-19", "04-22", "05-01", "05-08", "07-05", "07-06",
"09-28", "10-28", "11-17", "12-24", "12-25", "12-26")
Вот то, что я создал.
library(dplyr)
library(lubridate)
df <- data.frame(
date=seq(as.Date("2019-01-01"), as.Date("2019-12-31"), "days")
) %>%
mutate(
weekend = if_else(wday(date) %in% c(7, 1), 1, 0),
business_holiday = if_else(
format(date, "%m-%d") %in% business_holidays & weekend == 0,
1, 0),
next_business_dt = date + 1
)
next_business_dt
неверно, поскольку следующий день может быть выходным (1 или 2 дня), а ближайший понедельник может бытьделовой праздник.Эти деловые каникулы могут длиться даже дольше, чем один день, например, канун Рождества - в 2017 году были выходные, а затем 3 дня в канун Рождества.