首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何从R中的Bizday包中排除bizdays()中的某些日期

如何从R中的Bizday包中排除bizdays()中的某些日期
EN

Stack Overflow用户
提问于 2021-02-18 15:56:09
回答 1查看 170关注 0票数 0

在R中使用bizdays()时,我试图排除下列日期: 2021-02-15和2021-02-16。

我有以下代码:

代码语言:javascript
复制
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')

现在,当我写的时候,例如:

代码语言:javascript
复制
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()时,我已经尝试过将这些日期作为节假日包含在向量中。

代码语言:javascript
复制
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"))时,我会得到以下错误:

代码语言:javascript
复制
Error in bizdays.Date(ymd("2021-02-01"), ymd("2021-02-17")) : 
  Given date out of range.

我怎么才能解决这个问题?

谢谢!

更新:正如在@Terru_theTerror回复的评论中提到的,当我使用create.calendar()时,我仍然没有找到一个可重复的替代方案。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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”参数:

代码语言:javascript
复制
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')

这件事做得很好!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66263494

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档