我想找到两个日期之间的所有星期二。但是,如果星期二属于用户定义的假期列表,那么我想改为星期三。
这段代码可以在我的测试中工作,但是它很简陋,我担心它会静默地失败。
low.date <- "1996-01-01"
high.date <- "1997-01-01"
holidays = c("01-01", "07-04", "12-25")
tues <- seq(as.Date(low.date), as.Date(high.date), by = 1)
tues <- subset(tues, format(tues, "%a") == "Tue")
tues <- ifelse(format(tues, "%m-%d") %in% holidays, tues + 1, tues)
tues <- as.Date(tues, origin = "1970-01-01")
谢谢!我看到的答案指向
timeDate
包,但我只看到用于查找工作日或假期的方法。是否有比我使用的逻辑更清洁/更安全的逻辑? 最佳答案
基本软件包中的POSIXlt允许您以数字形式访问wday
,因为日子的名称因系统而异,因此更加安全。
low.date <- "1996-01-01"
high.date <- "1997-01-01"
holidays <- c("01-01", "07-04", "12-25")
all.days <- seq(as.Date(low.date), as.Date(high.date), by = "day")
# Tuesday is Day 2 of the week
all.tues <- all.days[as.POSIXlt(all.days)$wday == 2]
tues.holidays <- format(all.tues, "%m-%d") %in% holidays
all.tues[tues.holidays] <- all.tues[tues.holidays] + 1