我正在尝试处理一组润滑间隔并确定日期是否在该组的任何成员内。
我的时间间隔不重叠,但最好给出一般答案。)
在开始数据分析之前,我不知道那组间隔中有多少个间隔:
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)
如果我考虑一下,我相信我可以将其强制为 TRUE。
但我怎么能问?:
#Don't Run:
INTERVALS <-c(interval1, interval2, ... intervalN)
day2 %within% INTERVALS
例如X 是否在 Y 工作时发生,其中“Y 工作时”是间隔向量。
有什么建议?
最佳答案
您可以矢量化所有内容,然后使用 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
关于Rstats lubridate ... 区间向量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41905358/