lubridate:floor_date устанавливает отметку времени начала ссылки

#r #timestamp #lubridate

Вопрос:

Я пытаюсь установить непрерывные метки времени на «каждые x часов» с lubridate:floor_date помощью . Однако, когда мой временной интервал превышает час первой метки времени, он уменьшается относительно полуночи вместо моей первой метки времени. Я не нашел способа установить контрольную метку времени для моего времени начала. У меня есть метки времени в UTC, но мне нужно указать их относительно, например, 6:00 и 18:00 по местному времени, что будет составлять 12-часовые интервалы, если ссылаться на местную полночь, но не работает для времени UTC, когда оно продолжает ссылаться на (UTC) полночь.

Я знаю, что мог бы преобразовать свои метки времени в местное время, но это далеко не идеально. Есть ли способ определить контрольные метки времени для floor_date того, что мне не хватает?

В принципе, то, что я хотел бы сделать, — это разместить метки времени «каждый час» относительно начала моих временных рядов, а не каждую метку времени отдельно относительно ее полуночи.

 timestampslt;-structure(c(1578628800, 1578632400, 1578636000, 1578639600, 1578643200,  1578646800, 1578650400, 1578654000, 1578657600, 1578661200), class = c("POSIXct",  "POSIXt"), tzone = "UTC")  floor_date(timestamps, '4 hours')   [1] "2020-01-10 04:00:00 UTC" "2020-01-10 04:00:00 UTC" "2020-01-10 04:00:00 UTC"  [4] "2020-01-10 04:00:00 UTC" "2020-01-10 08:00:00 UTC" "2020-01-10 08:00:00 UTC"  [7] "2020-01-10 08:00:00 UTC" "2020-01-10 08:00:00 UTC" "2020-01-10 12:00:00 UTC" [10] "2020-01-10 12:00:00 UTC"  floor_date(timestamps, '5 hours')   [1] "2020-01-10 00:00:00 UTC" "2020-01-10 05:00:00 UTC" "2020-01-10 05:00:00 UTC"  [4] "2020-01-10 05:00:00 UTC" "2020-01-10 05:00:00 UTC" "2020-01-10 05:00:00 UTC"  [7] "2020-01-10 10:00:00 UTC" "2020-01-10 10:00:00 UTC" "2020-01-10 10:00:00 UTC" [10] "2020-01-10 10:00:00 UTC"     

Ответ №1:

Попробуйте clock упаковку:

 clock::date_floor(timestamps, 'hour', n = 4)  [1] "2020-01-10 04:00:00 UTC" "2020-01-10 04:00:00 UTC"  [3] "2020-01-10 04:00:00 UTC" "2020-01-10 04:00:00 UTC"  [5] "2020-01-10 08:00:00 UTC" "2020-01-10 08:00:00 UTC"  [7] "2020-01-10 08:00:00 UTC" "2020-01-10 08:00:00 UTC"  [9] "2020-01-10 12:00:00 UTC" "2020-01-10 12:00:00 UTC"  clock::date_floor(timestamps, 'hour', n = 5)  [1] "2020-01-10 01:00:00 UTC" "2020-01-10 01:00:00 UTC"  [3] "2020-01-10 06:00:00 UTC" "2020-01-10 06:00:00 UTC"  [5] "2020-01-10 06:00:00 UTC" "2020-01-10 06:00:00 UTC"  [7] "2020-01-10 06:00:00 UTC" "2020-01-10 11:00:00 UTC"  [9] "2020-01-10 11:00:00 UTC" "2020-01-10 11:00:00 UTC"