Среднее значение интервала дат в lubridate - PullRequest
0 голосов
/ 17 октября 2018

Как вы получаете «среднее» (или, точнее, среднюю точку) объекта интервала смазки?Я попытался использовать функцию base mean (), но она возвращает значение double.

library(lubridate)   
ex = interval(ymd("2009-05-01"), ymd("2009-07-01"))
mean(ex)
[1] 5270400

Ответы [ 2 ]

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

Один из вариантов - просто добавить к дате начала половину продолжительности interval.Попробуйте:

ex@start + as.duration(ex)/2
[1] "2009-05-31 12:00:00 UTC"
0 голосов
/ 17 октября 2018

Вы можете использовать функции int_start() и int_end() для вычисления средней точки интервала:

library(lubridate)
int_start(ex) + (int_end(ex) - int_start(ex))/2
[1] "2009-05-31 12:00:00 UTC"

Вы можете сделать это простой функцией для простоты:

int_midpoint <- function(interval) {
    int_start(interval) + (int_end(interval) - int_start(interval))/2
}

int_midpoint(ex)
[1] "2009-05-31 12:00:00 UTC"

Эта функция также будет работать с lapply (хотя и не sapply) для вектора:

lapply(c(ex, ex), int_midpoint)
[[1]]
[1] "2009-05-31 12:00:00 UTC"

[[2]]
[1] "2009-05-31 12:00:00 UTC"
...