在R中添加1个工作日

 牛粪不插花88 发布于 2023-02-08 19:45

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)向前移动到下一个工作日.

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有