检测连续两天,并在R中的data.frame中的两个连续日期中子集/筛选特定时间段

检测连续两天,并在R中的data.frame中的两个连续日期中子集/筛选特定时间段,r,dataframe,datetime,time-series,subset,R,Dataframe,Datetime,Time Series,Subset,我在这个链接中有一个天气信息的data.frame 此天气信息每4-6分钟记录一次(取决于天数)。我想从连续两天的data.frame中提取一段时间。例如,我想提取2018年4月9日上午9:45到2018年4月10日上午9:45的时间段,以及2018年4月23日上午9:45到2018年4月24日上午9:45的时间段 我还按照建议创建了一个假的data.frame,但我的实际data.frame有60多个连续两天的组: df1 <- data.frame( datetime = seq

我在这个链接中有一个天气信息的data.frame

此天气信息每4-6分钟记录一次(取决于天数)。我想从连续两天的data.frame中提取一段时间。例如,我想提取2018年4月9日上午9:45到2018年4月10日上午9:45的时间段,以及2018年4月23日上午9:45到2018年4月24日上午9:45的时间段

我还按照建议创建了一个假的data.frame,但我的实际data.frame有60多个连续两天的组:

df1 <- data.frame(
  datetime = seq(
    as.POSIXct("2018-4-9 00:00"), as.POSIXct("2018-4-10 00:00"), by = "60 min"))
df2 <- data.frame(
  datetime = seq(
    as.POSIXct("2018-4-23 00:00"), as.POSIXct("2018-4-24 00:00"), by = "60 min"))
df3 <- data.frame(
  datetime = seq(
    as.POSIXct("2018-5-7 00:00"), as.POSIXct("2018-5-8 00:00"), by = "60 min"))
df <- rbind(df,df2,df3)

我不确定我是不是在以一种可以理解的方式陈述我的问题,因为这个逻辑问题现在正在扰乱我的大脑。。。如果有任何建议和帮助,我将不胜感激!另外,如果问题不够清楚,请随时要求我澄清。

我将以以下方式使用
dplyr::between

首先,让我们生成一些示例数据(最好是显式地包含数据,而不是提供链接)


df Hi@Maurits Evers,因为我有大约100多个约会,有没有办法在这些天里做到这一点?谢谢你指出错误。我已经改变了。@XM_Z“因为我有大约100多个约会,有没有办法用这些天来做呢?”我不知道你的意思。你能编辑你的文章,提供一个更简单的例子,也许是基于我给出的样本数据?是否要为多个
(开始、结束)
范围筛选源数据?如果是这样,请澄清您的预期输出。您好@Maurits Evers,我按照建议编辑了我的问题。是的,我想筛选多个(开始、结束)范围的源数据。我有60多组连续日期,我想检测这些连续日期,并在这些连续日期的每组中筛选一个时间段(第一天上午9:45到第二天上午9:45),例如2018-4-9~2018-4-10,2018-4-23~2018-4-24,…,2020-6-5~2020-6-6。感谢更新@xmz;我想你想要的是一个不平等的加入;我已经对我的帖子进行了编辑,请看一看。这应该可以直接推广到更多的范围。感谢您的更新,@Maurits Evers!我将花一些时间研究数据,看看它今天晚些时候或明天是否有效,我会让您知道。
daystart <- hm("0:0")

weather$date1 <- sort(as.Date(weather$Date))
a <- split(weather$date1,cumsum(c(TRUE,diff(weather$date1)>1)))
weather <- data.frame(weather,a)
#this does not work

weather <- weather %>%
  group_by(group #the grouped consecutive days) %>%
  mutate(dur = as.numeric(Time-daystart)) %>%
  filter(dur > xxx & dur < xxxx)
#I was thinking to do it this way
weather <- weather %>%
  filter(
    if(diff(Date) <= 1){
      Time <= trapstart
    }
    else{
    NULL
    }
  )
weather <- weather %>%
  filter(
    if("these are two consecutive days"){
      "9:45 of the first day < Time <= 9:45 the second day"
    }
    else{
    NULL
    }
  )
Date    Time    DateTime
4/9/2018    9:46    4/9/2018 9:46
4/9/2018    15:34   4/9/2018 15:34
4/9/2018    22:44   4/9/2018 22:44
4/10/2018   4:34    4/10/2018 4:34
4/10/2018   7:09    4/10/2018 7:09
4/10/2018   9:44    4/10/2018 9:44
4/23/2018   9:46    4/23/2018 9:46
4/23/2018   12:27   4/23/2018 12:27
4/23/2018   19:29   4/23/2018 19:29
4/24/2018   1:08    4/24/2018 1:08
4/24/2018   5:24    4/24/2018 5:24
4/24/2018   9:44    4/24/2018 9:44
5/7/2018    9:48    5/7/2018 9:48
5/7/2018    17:59   5/7/2018 17:59
5/8/2018    0:55    5/8/2018 0:55
5/8/2018    1:00    5/8/2018 1:00
5/8/2018    4:30    5/8/2018 4:30
5/8/2018    9:41    5/8/2018 9:41
library(dplyr)
start <- as.POSIXct("2018-4-9 9:45")
end <- as.POSIXct("2018-4-10 9:45")
df %>% filter(between(datetime, start, end))