фильтр для определенного времени суток (временной интервал) из POSIXct с аргументом для нескольких дней - PullRequest
0 голосов
/ 21 октября 2018

Я знаю, что могу использовать POSIXct в dplyr:filter в качестве аргумента.Я успешно сократил свои данные, используя аргументы вроде> =.Вот мой код:

library (dplyr)
start <- as.POSIXct("2018-05-18 00:00")
tseq <- seq(from = start, length.out = 1440, by = "10 mins")
observations <- data.frame(
  Time = tseq,
  Temp = sample(10:37,1440, replace = TRUE, set.seed(seed = 10)),
  Variable1 = sample(1:200,1440, replace = TRUE, set.seed(seed = 187)),
  Variable2 = sample(300:800,1440, replace = TRUE, set.seed(seed = 333))
)

observations_short <- observations %>% filter (Time <=  as.POSIXct ("2018-05-23 00:00", tz="CET") )

Я предполагал, что что-то вроде этого должно работать, чтобы фильтровать значения для каждого дня с 9:00 до 17:00, но я не мог понять рабочий синтаксис для этого.

    observations_9to5 <- observations %>% filter (Time >=  as.POSIXct ("09:00", tz="CET") ) %>% filter (Time <=  as.POSIXct ("17:00", tz="CET") )

Помощь с синтаксисом, если это обычно работает с dplyr::filter, будет принята с благодарностью.Если это не работает с dplyr, есть ли возможность сделать это с данными в формате xts?

1 Ответ

0 голосов
/ 21 октября 2018

Это довольно просто сделать с lubridate.Мы извлекаем компонент hour и сравниваем его соответствующим образом.

library(lubridate)
library(dplyr)

observations %>%
    filter(hour(Time) >= 9 & hour(Time) < 17)


#                  Time Temp Variable1 Variable2
#1   2018-05-18 09:00:00   15       113       782
#2   2018-05-18 09:10:00   26        30       379
#3   2018-05-18 09:20:00   22       136       630
#4   2018-05-18 09:30:00   23        49       781
#....

Или, если вы хотите продолжить подход as.POSIXct, это будет немного сложнее и будет выглядеть примерно так:

observations %>%
     filter(as.POSIXct(format(Time, "%H:%M:%S"), format = "%H:%M:%S") >= 
                      as.POSIXct("09:00:00", format = "%H:%M:%S") &
            as.POSIXct(format(Time, "%H:%M:%S"), format = "%H:%M:%S") < 
                    as.POSIXct("17:00:00", format = "%H:%M:%S"))

Здесь мы извлекаем времякомпонента с помощью format, а затем преобразовать его обратно в формат POSIXct, а затем сравнить его с 9 и 17 часами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...