检测连续两天,并在R中的data.frame中的两个连续日期中子集/筛选特定时间段
我在这个链接中有一个天气信息的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多个连续两天的组:检测连续两天,并在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
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))