簡體   English   中英

在R中添加1個工作日

[英]add 1 business day to date in R

我在R中有一個Date對象,並希望在此日期添加1個工作日。 如果結果是假期,我希望將日期增加到下一個非假日日期。 我們假設我的意思是紐約證券交易所假期。 我怎樣才能做到這一點?

例:

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

我可以使用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" 

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 )向前移動到下一個工作日。

holidayNYSE(year = getRmetricsOptions("currentYear"))也從timeDate包中isHoliday timeDate

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM