R:如何按小时和分钟过滤时间戳?

ℕʘʘ*_*ḆḽḘ 6 datetime r lubridate dplyr

我正在为以下示例而苦苦挣扎

time = c('2013-01-03 21:59:21.549', '2013-01-04 22:00:21.549', '2013-01-05 22:01:21.222', '2013-01-06 22:06:23.559' )
value = c(1,2,3,4)

data <- data_frame(time, value)
data <-data %>%  mutate(time = ymd_hms(time))

> data
# A tibble: 4 × 2
                 time value
               <dttm> <dbl>
1 2013-01-03 21:59:21     1
2 2013-01-04 22:00:21     2
3 2013-01-05 22:01:21     3
4 2013-01-06 22:06:23     4
Run Code Online (Sandbox Code Playgroud)

我怎样才能写出一份dplyr::filter声明,而不是每天只保留21:5922:01(包括)之间的观察结果?

hour(time)和分开玩minute(time)在这里似乎不太好。

我在这里错过了什么吗?

预期输出:仅第 1,2 和 3 行。谢谢!

ℕʘʘ*_*ḆḽḘ 6

2019 年来了!这是一个更好(也更简单)的解决方案,使用as.hms. 论证tz是强制性的。

    time_str = c('2013-01-03 21:59:21.549', '2013-01-04 22:00:21.549', '2013-01-05 
    22:01:21.222', '2013-01-06 22:06:23.559' )
    value = c(1,2,3,4)
    data <- tibble(time_str, value)

    data %>%  mutate(timestamp_utc = ymd_hms(time_str, tz = 'UTC'),
                     timestamp_est = with_tz(timestamp_utc, 'America/New_York'),
                            time_est = as.hms(timestamp_est, tz = 'America/New_York')) %>% 
      filter(time_est >= hms::as.hms('16:59:00', tz = 'America/New_York'),
             time_est <= hms::as.hms('17:01:00', tz = 'America/New_York'))

Run Code Online (Sandbox Code Playgroud)

会做这份工作

# A tibble: 2 x 5
  time_str                value timestamp_utc           timestamp_est           time_est 
  <chr>                   <dbl> <dttm>                  <dttm>                  <time>   
1 2013-01-03 21:59:21.549     1 2013-01-03 21:59:21.549 2013-01-03 16:59:21.549 16:59.549
2 2013-01-04 22:00:21.549     2 2013-01-04 22:00:21.549 2013-01-04 17:00:21.549 17:00.549
Run Code Online (Sandbox Code Playgroud)