有没有一个简单的方法来判断一个时间间隔是否与R中的一个周末重叠?

有没有一个简单的方法来判断一个时间间隔是否与R中的一个周末重叠?,r,date,lubridate,R,Date,Lubridate,我有一系列的到达和离开日期。我想知道这些日期是否与周末重叠。我可以编写一个自定义函数,在间隔中的每一天进行散步,看看它们是否是周末。有没有一种更简单的方法可以更好地扩展 我正在使用lubridate,但如果这能让我的工作更轻松的话,我很乐意使用不同的日期包。使用“U”日期作为到达日期,d_日期和离开日期,类似的方式可以工作: require(lubridate) weekend_overlap <- ifelse(wday(a_date) %in% c(1, 7) || wd

我有一系列的到达和离开日期。我想知道这些日期是否与周末重叠。我可以编写一个自定义函数,在间隔中的每一天进行散步,看看它们是否是周末。有没有一种更简单的方法可以更好地扩展


我正在使用lubridate,但如果这能让我的工作更轻松的话,我很乐意使用不同的日期包。

使用“U”日期作为到达日期,d_日期和离开日期,类似的方式可以工作:

require(lubridate)
weekend_overlap <-    ifelse(wday(a_date) %in% c(1, 7) || 
   wday(d_date) %in% c(1, 7) || 
   interval(a_date,d_date)/ddays(1) > 4,TRUE,FALSE)
require(润滑油)
周末(4,对,错)

这个base-R解决方案怎么样:

# make a set of sequences from beginning and ending dates and test with:
as.POSIXlt(x)$wday %in% c(0,6)
这将提供一个真/假向量,您可以通过以下方式确定序列中的任何项是否为真:

max( as.POSIXlt(x)$wday %in% c(0,6) )
下面是一个更通用(矢量化)的函数,用于检查从-
的间隔是否包含某个工作日(1-7):

#“检查工作日是否在间隔内
#' 
#“@param wday星期几(整数1-7)
#“@param从日期开始。可以是一个向量。
#“@param到目前为止。长度与'from'相同,且必须大于'from'。
#“@param week_start 1=周一。7=周日
#' 
wday_in_interval=函数(wday、from、to、week_start=1){
如果(周日<1 |周日>7)
停止(“wday必须是1到7之间的整数。”)
如果(周开始)
wday=1+((wday-2)+周开始时间%%7)#将wday转换为周开始时间=1(ISO标准)
如果(有(从>到,na.rm=TRUE))
停止(`from`必须在`to`之前)
#如果间隔大于一周,则它通常包含任何工作日
超过一周=差异时间(从,到,单位=“天”)>=7
#检查工作日是否小于/大于“从”和“到”
天数\u from=as.numeric(strftime(from,“%u”))
天数_to=as.numeric(strftime(to,“%u”))
包含_weekday=ifelse(
strftime(from,“%V”)==strftime(to,“%V”),#日期是否在同一周内?

yes=wday>=days_from&wday=days_from|wday我尝试的伪代码是:
if(end-start>5)TRUE else if(start=Saturday)正确的
。主要优点是您不必声明结束和开始之间的所有日期。您可以使用R基中的
工作日、星期一=1、星期二=2等为工作日分配数字。从中确定离开的星期日是否<到达的星期日,如果是,则它们在周末出现。如果她的约会是%在%周六或周日,然后他们在周末。这仍然很慢,但至少你不必走每一个间隔。我喜欢这个想法,但当间隔跨越周五:周一时它失败了。这是4天长,包括周末。我知道我遗漏了一些东西。好的,我们可以替换间隔(a_日期,d_日期)吗/ddays(1)>4`with
wday(a_date)>wday(d_date)
?第二个条件检查
周是否因您的想法而发生变化,我的结论是:containsWeekend 6,TRUE,FALSE)}如何在给定间隔的情况下(或只是开始/结束日期)轻松地创建一个日期序列?我不是每天都要循环往复吗?