Rstats lubridate ...间隔矢量

时间:2017-01-28 01:01:24

标签: r lubridate

我正在尝试处理一组rubridate间隔,并确定日期是否在该集合的任何成员内。 我的间隔不重叠,但一般答案最好。)

在开始数据分析之前,我不知道在这组间隔中有多少个间隔:

library(lubridate)

#Create 4 dates; 2 pairs

start1 <-ymd("2015-01-01")
stop1 <-ymd("2015-01-08")

start2 <-ymd("2015-02-01")
stop2 <-ymd("2015-02-08")

#Make 2 non-overlapping intervals

interval1 <-start1%--%stop1 

interval2 <-start2%--%stop2 

#two more dates, each within an interval

day1 <-ymd("2015-01-04")

day2 <-ymd("2015-02-04")

#now test the new dates against the intervals.

day1 %within%interval1 #TRUE

day2 %within%interval1 #FALSE

day2 %within%interval2 #TRUE

我能做到:

day2 %within%c(interval1, interval2) #(FALSE, TRUE)

如果我考虑的话,我相信我可以强迫它为真。

但我该怎么问?:

#Don't Run:

INTERVALS <-c(interval1, interval2, ... intervalN)

day2 %within% INTERVALS

e.g。当Y工作时X发生了,“当Y工作时”是一个间隔矢量。

有什么建议吗?

1 个答案:

答案 0 :(得分:2)

您可以对所有内容进行矢量化,然后使用lapply为您要检查的每一天使用%within%

library(lubridate)

start <-ymd("2015-01-01", "2015-02-01")
stop <-ymd("2015-01-08", "2015-02-08")

days <-ymd("2015-01-04", "2015-02-04")

lapply(days, `%within%`, start %--% stop)
#> [[1]]
#> [1]  TRUE FALSE
#> 
#> [[2]]
#> [1] FALSE  TRUE

这是days的每个元素的列表,它是否在每个区间中。要检查days的每个元素是否在任何区间内,请为*apply编写匿名函数:

sapply(days, function(x){any(x %within% interval(start, stop))})
## [1] TRUE TRUE