如何从 R 中的 Bizdays 包中排除 bizdays() 中的某些日期
How to exclude certain dates in bizdays() from Bizdays Package in R
我试图在 R 中使用 bizdays()
时排除以下日期:2021-02-15 和 2021-02-16。
我有以下代码:
library(bizdays)
library(lubridate)
create.calendar(name='MyCalendar', weekdays=c('sunday', 'saturday'),
adjust.from=adjust.next, adjust.to=adjust.previous, financial=F)
bizdays.options$set(default.calendar='MyCalendar')
现在,当我写的时候,例如:
bizdays(ymd("2021-02-01"), ymd("2021-02-17"))
正如预期的那样,我得到“13”作为输出。但是,我试图排除这两个日期(2021-02-15 和 2021-02-16)。鉴于此,我想在编写 bizdays(ymd("2021-02-01"), ymd("2021-02-17"))
.
时将“11”作为输出
此外,每当我计算 2 月 and/or 其他月份任何日期之间的工作日时,我都想排除 2021-02-15 和 2021-02-16。因此,当我计算 bizdays(ymd("2021-02-01"), ymd("2021-02-28"))
时,我想得到“18”而不是“20”;当我计算 bizdays(ymd("2021-01-23"), ymd("2021-02-28"))
时,我想得到“23”而不是“25”。
我已经尝试在使用 create.calendar()
:
时将这些日期作为假期包含在向量中
create.calendar(name='MyCalendar', weekdays=c('sunday', 'saturday'),
adjust.from=adjust.next, adjust.to=adjust.previous, financial=F,
holidays = c(ymd("2021-02-15"), ymd("2021-02-16")))
bizdays.options$set(default.calendar='MyCalendar')
但是当我写bizdays(ymd("2021-02-01"), ymd("2021-02-17"))
时,我得到以下错误:
Error in bizdays.Date(ymd("2021-02-01"), ymd("2021-02-17")) :
Given date out of range.
我该如何解决这个问题?
谢谢!
更新:正如@Terru_theTerror的回复的评论中提到的,我在使用create.calendar()
.
时仍然没有找到可重现的替代方案
终于解决了
根据 create.calendar()
函数的 R 文档:
The arguments start.date and end.date can be set but once they aren't and holidays is set, start.date is defined to min(holidays) and end.date to max(holidays). If holidays isn't set start.date is set to '1970-01-01' and end.date to '2071-01-01'.
因此,在创建日历时,确实应该将“2021-02-15”和“2021-02-16”作为“假期”向量中的日期。问题是,还必须指定默认情况下的“start.date”和“end.date”参数:
create.calendar(name='MyCalendar', weekdays=c('sunday', 'saturday'),
adjust.from=adjust.next, adjust.to=adjust.previous, financial=F,
holidays = c(ymd("2021-02-15"), ymd("2021-02-16")),
start.date = ymd("1970-01-01"), end.date = ymd("2071-01-01"))
bizdays.options$set(default.calendar='MyCalendar')
结果完美!
我试图在 R 中使用 bizdays()
时排除以下日期:2021-02-15 和 2021-02-16。
我有以下代码:
library(bizdays)
library(lubridate)
create.calendar(name='MyCalendar', weekdays=c('sunday', 'saturday'),
adjust.from=adjust.next, adjust.to=adjust.previous, financial=F)
bizdays.options$set(default.calendar='MyCalendar')
现在,当我写的时候,例如:
bizdays(ymd("2021-02-01"), ymd("2021-02-17"))
正如预期的那样,我得到“13”作为输出。但是,我试图排除这两个日期(2021-02-15 和 2021-02-16)。鉴于此,我想在编写 bizdays(ymd("2021-02-01"), ymd("2021-02-17"))
.
此外,每当我计算 2 月 and/or 其他月份任何日期之间的工作日时,我都想排除 2021-02-15 和 2021-02-16。因此,当我计算 bizdays(ymd("2021-02-01"), ymd("2021-02-28"))
时,我想得到“18”而不是“20”;当我计算 bizdays(ymd("2021-01-23"), ymd("2021-02-28"))
时,我想得到“23”而不是“25”。
我已经尝试在使用 create.calendar()
:
create.calendar(name='MyCalendar', weekdays=c('sunday', 'saturday'),
adjust.from=adjust.next, adjust.to=adjust.previous, financial=F,
holidays = c(ymd("2021-02-15"), ymd("2021-02-16")))
bizdays.options$set(default.calendar='MyCalendar')
但是当我写bizdays(ymd("2021-02-01"), ymd("2021-02-17"))
时,我得到以下错误:
Error in bizdays.Date(ymd("2021-02-01"), ymd("2021-02-17")) :
Given date out of range.
我该如何解决这个问题?
谢谢!
更新:正如@Terru_theTerror的回复的评论中提到的,我在使用create.calendar()
.
终于解决了
根据 create.calendar()
函数的 R 文档:
The arguments start.date and end.date can be set but once they aren't and holidays is set, start.date is defined to min(holidays) and end.date to max(holidays). If holidays isn't set start.date is set to '1970-01-01' and end.date to '2071-01-01'.
因此,在创建日历时,确实应该将“2021-02-15”和“2021-02-16”作为“假期”向量中的日期。问题是,还必须指定默认情况下的“start.date”和“end.date”参数:
create.calendar(name='MyCalendar', weekdays=c('sunday', 'saturday'),
adjust.from=adjust.next, adjust.to=adjust.previous, financial=F,
holidays = c(ymd("2021-02-15"), ymd("2021-02-16")),
start.date = ymd("1970-01-01"), end.date = ymd("2071-01-01"))
bizdays.options$set(default.calendar='MyCalendar')
结果完美!