如何用lubridate提取重复的时间间隔?

问题描述 投票:0回答:1

在 200,000/400,000 行的数据集中,在 6 个月的时间段内每分钟记录多个 id 的变量,我想提取一天中特定时间(例如上午 7 点到晚上 17 点)内发生的数据。我一般在 Tidyverse 工作。

Lubridate 间隔似乎是要使用的函数,但我如何让它在跨日期的重复时间跨度上工作?

示例数据:

id<-c("A","A","A","B","B","B")
datetime<-ymd_hms("2023-05-24 06:59:00","2023-05-24 07:00:00","2023-05-24 07:01:00","2023-05-24 06:59:00","2023-05-24 07:00:00","2023-05-24 07:01:00")
measurement<-c(4,5,7,9,2,6)
df<-data.frame(id,datetime,measurement)

我可以仅添加时间列

mutate(time=format(datetime,format="%H:%M"))

但是创建仅包含时间而不是日期的间隔似乎不起作用

valid_time<-interval(hm('07:00'),hm('17:00'))

我的目标是创建一个包含 TRUE/FALSE 的列,判断时间点是否在间隔内,然后对其进行过滤。

mutate(valid=time %within% valid_time)

理想情况下,我可以对日期时间进行一步过滤,如下所示(不起作用)

filter(time %in% 0700:1700)

甚至更好(也不起作用)

filter(hm(datetime) %in% 0700:1700)

提前非常感谢!

r tidyverse lubridate
1个回答
0
投票

这是使用

data.table
as.ITime()
方法,它代表一天中的秒数。

library(data.table)
setDT(df)[as.ITime(datetime) %between% c(as.ITime("07:00:00"), 
                                         as.ITime("17:00:00")), ]

       id            datetime measurement
   <char>              <POSc>       <num>
1:      A 2023-05-24 07:00:00           5
2:      A 2023-05-24 07:01:00           7
3:      B 2023-05-24 07:00:00           2
4:      B 2023-05-24 07:01:00           6
© www.soinside.com 2019 - 2024. All rights reserved.