Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在R中添加1个工作日_R_Date_Lubridate - Fatal编程技术网

在R中添加1个工作日

在R中添加1个工作日,r,date,lubridate,R,Date,Lubridate,我在R中有一个Date对象,希望在此日期上添加一个工作日。如果结果是假日,我希望日期增加到下一个非假日日期。让我们假设我指的是纽约证交所假期。我该怎么做 例如: mydate = as.Date("2013-12-24") mydate + 1 #this is a holiday so I want this to roll over to the 26th instead Lubridate不会帮助您,因为它不是工作日的概念 至少有两个方案是这样的,而且它们都有财务倾向: 有许多交易所的

我在R中有一个
Date
对象,希望在此日期上添加一个工作日。如果结果是假日,我希望日期增加到下一个非假日日期。让我们假设我指的是纽约证交所假期。我该怎么做

例如:

mydate = as.Date("2013-12-24")
mydate + 1 #this is a holiday so I want this to roll over to the 26th instead

Lubridate不会帮助您,因为它不是工作日的概念

至少有两个方案是这样的,而且它们都有财务倾向:

  • 有许多交易所的exchange日历(但它是一个相当大的软件包)

  • 还有日历

这两个包都有合适的文档,允许您通过工作示例进行设置

第三种选择(对于简单用途)是将本地日历存储几年并使用它

编辑:下面是一个快速RQuantLib示例:

R> library(RQuantLib)
R> adjust(calendar="TARGET", dates=Sys.Date()+2:6, bdc = 0)
  2013-12-22   2013-12-23   2013-12-24   2013-12-25   2013-12-26 
"2013-12-23" "2013-12-23" "2013-12-24" "2013-12-27" "2013-12-27" 
R> 

它只是将给定的日期(从参数
日期
)向前移动到下一个工作日。

holidayNYSE(year=getRmetricsOptions(“currentYear”)
也可以从
timeDate
包中签出
isHoliday
我可能会使用
timeDate::nextBizDay()的组合
roll=-Inf
来设置
数据。表
查找日历,如下所示:

library(data.table)
library(timeDate)

## Set up a calendar for 2013 & 2014
cal <- data.table(date=seq(from=as.Date("2013-01-01"), by=1, length=730),
                  key="date")    
cal2 <- copy(cal)
cal2[,nextBizDay:=date+1]
cal2 <- cal2[isBizday(as.timeDate(nextBizDay)),]
cal <- cal2[cal,,roll=-Inf]

## Check that it works
x <- as.Date("2013-12-21")+1:10
cal[J(x),]
#           date nextBizDay
#  1: 2013-12-22 2013-12-23
#  2: 2013-12-23 2013-12-24
#  3: 2013-12-24 2013-12-26
#  4: 2013-12-25 2013-12-26
#  5: 2013-12-26 2013-12-27
#  6: 2013-12-27 2013-12-30
#  7: 2013-12-28 2013-12-30
#  8: 2013-12-29 2013-12-30
#  9: 2013-12-30 2013-12-31
# 10: 2013-12-31 2014-01-01

## Or perhaps:

lu <- with(cal, setNames(nextBizDay, date))
lu[as.character(x[1:6])]
#   2013-12-22   2013-12-23   2013-12-24   2013-12-25   2013-12-26   2013-12-27 
# "2013-12-23" "2013-12-24" "2013-12-26" "2013-12-26" "2013-12-27" "2013-12-30" 
库(data.table)
图书馆(时间日期)
##设置2013年和2014年的日历

去哪里度假?美国的假日与中国的假日大不相同。。。我想你会很难找到一个编译了所有代码的包维护者。但是,创建自己的查找表并跳到第二天跳过周六和周日是可行的。好的方面:只需更新问题以假设纽约证券交易所的假日你打算使用假日表吗?@MatthewLundberg:我不确定;这是一个解决办法。我怀疑已经有一个包潜在地实现了这个功能,我不认为你不需要一个
数据表。循环解决方案应该可以。@DirkEddelbuettel我确信您不需要
数据表。当我想将工作日回滚到没有后续工作日的日期(或者你想如何描述)时,它实际上是我在心理上最接近的工具。非常好的data.table技巧。你有使用dplyr和管道%>%的相应版本吗?@KevinZhu没有。但是,如果您构建了dplyr解决方案,请随时在这里发表您的评论。我将把它添加到其他喜欢dplyr的人的主帖子中。