Пол даты / время с пользовательским временем начала (lubridate) - PullRequest
0 голосов
/ 15 января 2020

Есть ли способ указать даты, используя нестандартное время начала вместо самого раннего времени?

Например, настил часов в день с 2-х 12-часовыми интервалами, начинающимися в 8 утра и 8 вечера, а не в 12 утра. и 12 часов вечера.

1004 * Пример:
x <- ymd_hms("2009-08-03 21:00:00")
y <- ymd_hms("2009-08-03 09:00:00")
floor_date(x, '12 hours')
floor_date(y, '12 hours')

# default lubridate output:
[1] "2009-08-03 12:00:00 UTC"
[1] "2009-08-03 UTC"

# what i would like to have:
[1] "2009-08-03 20:00:00 UTC"
[1] "2009-08-03 08:00:00 UTC"


1 Ответ

1 голос
/ 15 января 2020

Вы можете запрограммировать маленький switch (но без lubridate).

FUN <- function(x) {
  s <- switch(which.min(abs(mapply(`-`, c(8, 20), as.numeric(substr(x, 12, 13))))), 
              "08:00:00", "20:00:00")
  as.POSIXct(paste(as.Date(x), s))
}
FUN("2009-08-03 21:00:00")
# [1] "2009-08-03 20:00:00 CEST"

FUN("2009-08-03 09:00:00")
# [1] "2009-08-03 08:00:00 CEST"
...