我想计算不包括周末和给定假期列表的2个日期之间的天数
a <- c('2016/05/2')
b <- c('2016/05/11')
a <- as.Date(a,'%Y/%m/%d')
b <- as.Date(b,'%Y/%m/%d')
Nweekdays <- Vectorize(function(a, b)
sum(!weekdays(seq(a, b, "days")) %in% c("Saturday", "Sunday")))
Nweekdays(a, b)
这是我如何计算没有周末的天数。但是,假设我想要排除“2016/05/3”和“2016/05/4”上的给定假期列表,然后计算上述两个日期(不包括周末)之间的天数。我无法编写此代码。请帮我。提前谢谢。
答案 0 :(得分:2)
怎么样?
f <- function(a, b, h) {
d <- seq(a, b, 1)[-1]
sum(!format(d, "%u") %in% c("6", "7") & !d %in% h)
}
f(a, b, as.Date(c("2016/05/3", "2016/05/4"),'%Y/%m/%d'))
或者,使用数据框:
vf <- Vectorize(f, c("a", "b"))
df <- data.frame(a=rep(a, 2), b=rep(b, 2))
df$diff <- with(df, vf(a, b, as.Date(c("2016/05/3", "2016/05/4"),'%Y/%m/%d')) )
答案 1 :(得分:1)
您可以按照以下方式执行此操作,
holidays <- as.Date(c('2016/05/3' , '2016/05/4' ))
date_range <- seq.Date(a, b, 1)
date_range[!weekdays(date_range) %in% (c("Saturday", "Sunday")) & !date_range %in% holidays]
#[1] "2016-05-02" "2016-05-05" "2016-05-06" "2016-05-09" "2016-05-10" "2016-05-11"