Rstats lubridate ... 区间向量

标签 r lubridate

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

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

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/

相关文章:

r - dplyr,lubridate:如何按周汇总数据帧?

r - 创建没有年份的月份和日期序列

r - 扩展等级() "Olympic Style"

r - 将标签添加到由 grid.arrange 从多个绘图制作的绘图

r - 根据作者将字符串粘贴在一起

r - 如何在 R 中添加小数时间?

R 润滑 : pretty_dates fails for some input data

r - 将 lubridate 功能更改为在星期一而不是星期日开始

r - 在 R 中高效、快速地将函数应用于 3D 数组

python - 从 Python 到 R 的 if-else 函数