在lubridate中增加15个工作日 [英] Adding 15 business days in lubridate
问题描述
我有一长串特定程序的开始日期.规则要求该程序最多在6个工作日内完成.我希望计算截止日期.
I have a long list of start dates of a certain procedure. Rules require the procedure to be completed in, at most, 6 business days. I wish to compute the deadline.
在R中使用lubridate,这样我可以得到六天的截止日期
Using lubridate in R, I can get a six-day deadline thus
> library(lubridate)
> date.in <- dmy(c("30-8-2001", "12-1-2003", "28-2-2003", "20-5-2004"))
> date.in
[1] "2001-08-30 UTC" "2003-01-12 UTC" "2003-02-28 UTC" "2004-05-20 UTC"
> deadline.using.days <- date.in + days(6)
> deadline.using.days
[1] "2001-09-05 UTC" "2003-01-18 UTC" "2003-03-06 UTC" "2004-05-26 UTC"
是否有一种简单的方法来添加六个工作日,即跳过周六和周日? 谢谢你.
Is there an easy way to add six business days --- i.e., skipping Saturdays and Sundays? Thank you.
推荐答案
timeDate
包中有一个漂亮的函数isBizday
,使功能比乍一看更有趣.
There's a nifty function isBizday
in the timeDate
package that made this more fun than it seemed on first glance.
date.in <- dmy(c("30-8-2001", "12-1-2003", "28-2-2003", "20-5-2004"))
这是一项完成这项工作的职能.在未来的日子里选择1:10
似乎是合理的,但这当然可以调整.
Here's a function to do the work. It seemed reasonable to choose 1:10
for the days to look ahead, but that can be adjusted of course.
deadline <- function(x) {
days <- x + 1:10
Deadline <- days[isBizday(as.timeDate(days))][6]
data.frame(DateIn = x, Deadline, DayOfWeek = weekdays(Deadline),
TimeDiff = difftime(Deadline, x))
}
结果如下:
library(timeDate)
Reduce(rbind, Map(deadline, as.Date(date.in)))
# DateIn Deadline DayOfWeek TimeDiff
# 1 2001-08-30 2001-09-07 Friday 8 days
# 2 2003-01-12 2003-01-20 Monday 8 days
# 3 2003-02-28 2003-03-10 Monday 10 days
# 4 2004-05-20 2004-05-28 Friday 8 days
这篇关于在lubridate中增加15个工作日的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!