我Date
在R中有一个对象,并希望在此日期添加1个工作日.如果结果是假期,我希望将日期增加到下一个非假日日期.我们假设我的意思是纽约证券交易所假期.我怎样才能做到这一点?
例:
mydate = as.Date("2013-12-24") mydate + 1 #this is a holiday so I want this to roll over to the 26th instead
Josh O'Brien.. 7
我可能会使用一个组合的timeDate::nextBizDay()
,并roll=-Inf
建立一个data.table
查询日历,就像这样:
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"
Dirk Eddelbu.. 6
Lubridate不会帮助你,因为它不是工作日的概念.
至少有两个包,他们都有财务方面的困难:
RQuantLib为许多交易所提供交换日历(但它是一个非常大的包)
timeDate也有日历
这两个软件包都有不错的文档,可以让您从工作示例中进行设置.
第三种选择(简单用途)是将本地日历存储几年并使用它.
编辑:这是一个快速的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>
它只是将给定的一天(从论证dates
)向前移动到下一个工作日.