R 过滤时间范围内的所有日期

R 过滤时间范围内的所有日期,r,dataframe,filter,dplyr,R,Dataframe,Filter,Dplyr,我有一个如下所示的数据框: entry_no id time _________ ___ _____ 1 1 2016-09-01 09:30:09 2 2 2016-09-02 10:36:18 3 1 2016-09-01 12:27:27 4 3 2016-09-03 10

我有一个如下所示的数据框:

entry_no      id            time
_________     ___           _____
1              1        2016-09-01 09:30:09
2              2        2016-09-02 10:36:18
3              1        2016-09-01 12:27:27
4              3        2016-09-03 10:24:30
5              1        2016-09-01 12:35:39
6              3        2016-09-06 10:19:45
从这里,我想过滤每天上午9点到上午10点之间出现的条目。我知道有一天我可以使用以下内容:

results=filter(df,time>='2016-09-01 09:00:00' && time<='2016-09-01 10:00:00') 

results=filter(df,time>='2016-09-01 09:00:00'&&time我建议使用
lubridate
软件包

library(lubridate)

date1 <- as.POSIXct("2016-09-01 09:00:00") #lower bound
date2 <- as.POSIXct("2016-09-01 10:00:00") #upper bound
rng <- new_interval(date1, date2)          #desired range

result <- df[df$time %within% rng,]

您可以通过一些简单的格式化来实现:

dat$hms <- format(as.POSIXct(dat$time), "%H:%M:%S")
dat[dat$hms >= "09:00:00" & dat$hms <= "10:00:00",]

#  entry_no id                time      hms
#1        1  1 2016-09-01 09:30:09 09:30:09

dat$hms=“09:00:00”&dat$hms也不要使用
&
,除非您真的想只与
df$time的第一个元素进行比较
&
是完整的向量化
。根据lubridate 1.7.9.9000,答案使用
lubridate::interval()
dat$hms <- format(as.POSIXct(dat$time), "%H:%M:%S")
dat[dat$hms >= "09:00:00" & dat$hms <= "10:00:00",]

#  entry_no id                time      hms
#1        1  1 2016-09-01 09:30:09 09:30:09