Различные длительности для интервала, продолжительности и периода - PullRequest
1 голос
/ 02 ноября 2019

Я новичок в lubridate. Я попытался вычислить разницу между двумя наборами времени с помощью lubridate, но получил немного разные ответы для интервала, продолжительности и периода

library(lubridate)
a <- dmy_hms("9/7/1988 4:30:00")
b <- dmy_hms("2/11/2019 4:30:00")

c <- a %--% b

per <- as.period(c)
dur <- as.duration(c)

time_length(c, unit = "year") #31.31694
time_length(per, unit = "year") #31.33716
time_length(dur, unit = "year") #31.33699

1 Ответ

0 голосов
/ 02 ноября 2019

Как объяснено в документации для as.duration, доступной через ?as.duration, as.duration вернет точные измерения времени, тогда как as.period обеспечит относительные измерения. Далее утверждается, что:

Следовательно, сопоставление один к одному между длительностями и периодами не существует. При использовании с объектом периода as.duration предоставляет неточную оценку длины периода;

Поэтому использование time_length приведет к различным результатам для as.period и as.duration.

Это также более подробно описано в документации для time_length, интервалы просто не эквивалентны длительностям .

Чтобы получить тот же результат для %--% иas.period, сначала преобразовать периоды в интервалы следующим образом:

res <- a %--% b
 dur <- as.duration(res)
 per <- as.period(res)
time_length(as.interval(per,a), "year")
[1] 31.31694
 time_length(res,"year") 
[1] 31.31694
...