在多个日期范围之间过滤

问题描述

我有一个很大的数据框,在两周内每秒进行四次测量。因此数据框很大。
我还有两个带有开始日期和结束日期的向量,它们定义了数据帧内的某些时间范围,必须将其过滤掉。
我要做的是提取开始日期和结束日期之间的数据。
我的数据看起来像这样。

library(lubridate)
library(dplyr)

df <- data.frame(datetime = seq(ymd_hms("2020/01/01 00:00:00"),by = "sec",length.out = 3600),var = rnorm(3600))

我的开始/结束向量看起来像这样。在这里,我仅添加了两个开始/结束组合。但是实际向量包含更多的值。

start = c(ymd_hms("2020/01/01 00:1:00"),ymd_hms("2020/01/01 00:30:00"))
end = c(ymd_hms("2020/01/01 00:1:04"),ymd_hms("2020/01/01 00:30:04"))

我试图使用来过滤它

filtered <- df %>%
  filter(datetime >= start & datetime <= end)

head(filtered)

             datetime        var
1 2020-01-01 00:01:00 -0.2245330
2 2020-01-01 00:01:02  0.5926424
3 2020-01-01 00:01:04 -0.3824533
4 2020-01-01 00:30:01 -0.7202059
5 2020-01-01 00:30:03 -0.5775794

但是它似乎降低了数据采样率,因为过滤后的数据帧在第一个时间间隔内只有三个测量值,而不是预期的五个值。

如果仅针对第一个开始日期和结束日期进行过滤,则会得到5个值。

filtered2 <- df %>%
  filter(datetime >= start[1] & datetime <= end[1])

head(filtered2)

             datetime         var
1 2020-01-01 00:01:00 -0.22453305
2 2020-01-01 00:01:01  1.13452854
3 2020-01-01 00:01:02  0.59264239
4 2020-01-01 00:01:03 -0.03700048
5 2020-01-01 00:01:04 -0.38245332

我遇到的困难是:
为什么第一次过滤有效,但不返回预期的完整日期范围?
以及如何过滤完整的数据?

我已经尝试过filter(between(datetime,start,end)。这给了我预期的结果,但仅在第一个日期范围内。看来dplyr::between不接受任何绒毛。

非常欢迎任何帮助。

更新
@ekoam正确指出data.table::between也可以工作。但是作为dplyr::between,它不喜欢矢量。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)