【问题标题】:Filter all days between a time range过滤时间范围内的所有日期
【发布时间】:2017-10-30 07:34:59
【问题描述】:

我有一个如下的数据框:

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') 

但要过滤掉每个月的每一天的结果。感谢任何帮助。

【问题讨论】:

  • 也不要使用&amp;&amp;,除非你真的想只与df$time的第一个元素进行比较。 &amp; 是完整的矢量化 AND

标签: r dataframe filter dplyr


【解决方案1】:

你可以通过一些简单的格式来实现它:

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

【讨论】:

    【解决方案2】:

    我建议使用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,]
    

    您可能需要检查 time 变量的类并在使用上述之前应用一些更改:

    df$time <- as.POSIXct(df$time)
    

    【讨论】:

    • answer 与 lubridate::interval() 配合使用,根据 lubridate 1.7.9.9000
    猜你喜欢
    • 2015-04-10
    • 1970-01-01
    • 1970-01-01
    • 2017-04-23
    • 2015-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多