【问题标题】:Next week day for a given vector of dates给定日期向量的下周日期
【发布时间】:2019-05-16 00:26:13
【问题描述】:

我试图在 R 中获取下一个工作日的日期向量。我的方法是创建一个工作日向量,然后找到我拥有的周末日期的日期。问题是周六和一些假期(在我的国家很多)我最终得到了前一个工作日,这是行不通的。

这是我的问题的一个例子:

vecDates = as.Date(c("2011-01-11","2011-01-12","2011-01-13","2011-01-14","2011-01-17","2011-01-18",
                      "2011-01-19","2011-01-20","2011-01-21","2011-01-24")) 
testDates = as.Date(c("2011-01-22","2011-01-23"))


findInterval(testDates,vecDates)

对于这两个日期,正确答案应该是 10,即“2011-01-24”,但我得到 9。 我想到了一个解决方案,我删除所有以前的日期到我正在分析的日期,然后使用findInterval。它可以工作,但它不是矢量化的,因此有点慢,不适合我的实际目的。

【问题讨论】:

  • 您可能需要查看包bizdays 标识工作日。
  • @iod 我已经准备好有一个工作日向量。那不是问题。我遇到的问题是将日期移到下一个工作日
  • findInterval 为您提供 x 之前元素的索引(即间隔数),例如:x<-c(1,5,6,8); findInterval(7,x) 为您提供 3(即 6 和 8 之间的间隔)。如果您想要在区间末尾的元素索引,只需在findInterval 的结果中加 1。
  • (同样,如果你在第一次约会之前给出一个日期,结果将为0)
  • @iod 这正是我所需要的(也理解findInterval)以及我正在使用它。有人只是复制并使其成为答案。感谢任何方式

标签: r date


【解决方案1】:

这是你想要的吗?

 vecDates = as.Date(c("2011-01-11","2011-01-12",
                     "2011-01-13","2011-01-14",
                     "2011-01-17","2011-01-18",
                     "2011-01-19","2011-01-20",
                     "2011-01-21","2011-01-24")) 
testDates = as.Date(c("2011-01-20","2011-01-22","2011-01-23"))

get_next_biz_day <- function(testdays, bizdays){
   o <- findInterval(testdays, bizdays) + 1
   bizdays[o]
}

get_next_biz_day(testDates, vecDates)
#[1] "2011-01-21" "2011-01-24" "2011-01-24"

【讨论】:

  • @几乎完美,但我只是每天移动 1 天。但在您的示例中,不应移动“2011-01-20”,因为它在 vecDates 中完全匹配。我设法解决了这个问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-19
  • 2012-03-23
  • 1970-01-01
  • 1970-01-01
  • 2022-10-23
  • 2020-03-24
相关资源
最近更新 更多