我正在尝试处理一组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工作时”是一个间隔矢量。
有什么建议吗?
答案 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