Что-то в функции часа () не так? - PullRequest
0 голосов
/ 25 октября 2018

Я не понимаю, почему hour() вывел выход из состояния.Я пытался установить 15-минутный интервал времени только с 8 до 16 (я имел в виду, что после 8:00 должен начинаться в 8:15 и заканчиваться в 16:00), но выходной идет не так.

Из этого:

library(lubridate)

startDate = "2018-10-01"
endDate = "2018-10-03"

timeseq <- data.frame(DateTime = seq(from=as.POSIXct(startDate),to=as.POSIXct(endDate),by="15 min"))

timeseq[(hour(timeseq$DateTime)>8 & hour(timeseq$DateTime)<=16),]

И я получил это:

> timeseq[(lubridate::hour(timeseq$DateTime)>8 & lubridate::hour(timeseq$DateTime)<=16),]
[1] "2018-10-01 09:00:00 GMT" "2018-10-01 09:15:00 GMT" "2018-10-01 09:30:00 GMT" "2018-10-01 09:45:00 GMT" "2018-10-01 10:00:00 GMT"
[6] "2018-10-01 10:15:00 GMT" "2018-10-01 10:30:00 GMT" "2018-10-01 10:45:00 GMT" "2018-10-01 11:00:00 GMT" "2018-10-01 11:15:00 GMT"
[11] "2018-10-01 11:30:00 GMT" "2018-10-01 11:45:00 GMT" "2018-10-01 12:00:00 GMT" "2018-10-01 12:15:00 GMT" "2018-10-01 12:30:00 GMT"
[16] "2018-10-01 12:45:00 GMT" "2018-10-01 13:00:00 GMT" "2018-10-01 13:15:00 GMT" "2018-10-01 13:30:00 GMT" "2018-10-01 13:45:00 GMT"
[21] "2018-10-01 14:00:00 GMT" "2018-10-01 14:15:00 GMT" "2018-10-01 14:30:00 GMT" "2018-10-01 14:45:00 GMT" "2018-10-01 15:00:00 GMT"
[26] "2018-10-01 15:15:00 GMT" "2018-10-01 15:30:00 GMT" "2018-10-01 15:45:00 GMT" "2018-10-01 16:00:00 GMT" "2018-10-01 16:15:00 GMT"
[31] "2018-10-01 16:30:00 GMT" "2018-10-01 16:45:00 GMT" "2018-10-02 09:00:00 GMT" "2018-10-02 09:15:00 GMT" "2018-10-02 09:30:00 GMT"
[36] "2018-10-02 09:45:00 GMT" "2018-10-02 10:00:00 GMT" "2018-10-02 10:15:00 GMT" "2018-10-02 10:30:00 GMT" "2018-10-02 10:45:00 GMT"
[41] "2018-10-02 11:00:00 GMT" "2018-10-02 11:15:00 GMT" "2018-10-02 11:30:00 GMT" "2018-10-02 11:45:00 GMT" "2018-10-02 12:00:00 GMT"
[46] "2018-10-02 12:15:00 GMT" "2018-10-02 12:30:00 GMT" "2018-10-02 12:45:00 GMT" "2018-10-02 13:00:00 GMT" "2018-10-02 13:15:00 GMT"
[51] "2018-10-02 13:30:00 GMT" "2018-10-02 13:45:00 GMT" "2018-10-02 14:00:00 GMT" "2018-10-02 14:15:00 GMT" "2018-10-02 14:30:00 GMT"
[56] "2018-10-02 14:45:00 GMT" "2018-10-02 15:00:00 GMT" "2018-10-02 15:15:00 GMT" "2018-10-02 15:30:00 GMT" "2018-10-02 15:45:00 GMT"
[61] "2018-10-02 16:00:00 GMT" "2018-10-02 16:15:00 GMT" "2018-10-02 16:30:00 GMT" "2018-10-02 16:45:00 GMT"

Может кто-нибудь объяснить, почему и как получить правильный результат?

Ответы [ 2 ]

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

В hour нет ничего плохого, и вывод, который вы видите, правильный.Например, извлечение часа 16:30:00 вернет 16, что удовлетворяет условию <= 16.То же самое для 16:15:00 вплоть до 16:59:59.

Я полагаю, вы имеете в виду нечто подобное в базе R?

timeseq[
    timeseq$DateTime > as.POSIXct(sprintf("%s 08:00:00", startDate)) &
    timeseq$DateTime <= as.POSIXct(sprintf("%s 16:00:00", endDate)), ]
0 голосов
/ 25 октября 2018

Как это?

 library(lubridate)
    timeseq%>%
      mutate(time=substr(DateTime,12,20))%>%
      filter(as.numeric(hms(time))>=32400, as.numeric(hms(time))<=57600)%>%
      select(-time)
...