0

我正在尝试过滤日内数据以仅包含一天中的特定时间段。某些软件包中是否有实现此目的的技巧。这是示例数据:

library(tibbletime)

example <- as.tibble(data.frame(
  date = ymd_hms(seq(as.POSIXct("2017-01-01 09:00:00"), as.POSIXct("2017-01-02 20:00:00"), by="min")),
  value = rep(1, 2101)))

我想每天只包括 10:00:00 - 18:35:00,但不能很好地做到这一点。我现在的解决方案是创建额外的指示列,然后按它们过滤,但它也没有很好地工作。

4

3 回答 3

1

您可以使用以下between()功能data.table

example[data.table::between(format(example$date, "%H:%M:%S"), 
                            lower = "10:00:00",
                            upper = "18:35:00"), ]
于 2017-11-07T14:09:56.417 回答
0
library(tibbletime)
library(tidyverse)
library(lubridate)

example <- as.tibble(data.frame(
  date = ymd_hms(seq(as.POSIXct("2017-01-01 09:00:00"), as.POSIXct("2017-01-02 20:00:00"), by="min")),
  value = rep(1, 2101)))

example %>%
  mutate(time = as.numeric(paste0(hour(date),".",minute(date)))) %>%
  filter(time >= 10 & time <= 18.35) %>%
  select(-time)
于 2017-11-07T14:37:30.207 回答
0

这很 hacky 但如果你真的想留在 tidyverse 中:

rng <- range((hms("10:00:00") %>% as_datetime()), (hms("18:35:00") %>% as_datetime()))

example %>% 
  separate(., date, into = c("date", "time"), sep = " ") %>% 
  mutate(
    time = hms(time) %>% as_datetime(),
    date = as_date(date)
  ) %>% 
  filter(time > rng[1] & time < rng[2]) %>% 
  separate(., time, into = c("useless", "time"), sep = " ") %>% 
  select(-useless)
于 2017-11-07T14:38:28.217 回答