在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“作为输出。
此外,我想不包括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()时,我仍然没有找到一个可重复的替代方案。
发布于 2021-02-19 14:47:10
我终于解决了。
根据create.calendar()函数的R文档:
参数start.date和end.date可以设置,但一旦它们没有设置,并且假日被设置,start.date被定义为min(假日),end.date定义为max(假日)。如果没有设置假日,则start.date设置为'1970-01-01‘,end.date设置为'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')这件事做得很好!
https://stackoverflow.com/questions/66263494
复制相似问题