Lubridate неожиданный результат - PullRequest
0 голосов
/ 12 марта 2019

Я столкнулся с неожиданным результатом с пакетом lubridate. Вот краткий пример для вычисления физического хода времени с использованием функции time_length; сначала напрямую, а затем на интервале. Похоже, что методы идентичны с использованием единиц измерения «секунды», но отличаются с использованием единиц измерения «месяцы». Кто-нибудь знает, почему это так?

Для справки я использую:

R version: 3.5.1
lubridate version: 1.7.4

Воспроизводимый пример:

library(lubridate)
## generate two dates to illustrate issue
startDate <- ymd("2015-02-27")
endDate <- ymd("2015-03-02")

## calculate physical passage of time, in seconds
time_length(endDate - startDate, "seconds") # result: 259200
time_length(interval(startDate, endDate), "seconds") # result: 259200
# The methods above match, but...

## calculate physical passage of time, in months
time_length(endDate - startDate, "months") # result: 0.09863014
time_length(interval(startDate, endDate), "months") # result: 0.1071429
# The results no longer match! Why?

1 Ответ

1 голос
/ 12 марта 2019

Месяцы не имеют постоянной длины.Вы пытаетесь перевести 259200 секунд, то есть 3 дня, в месяцы

> endDate - startDate
Time difference of 3 days

Ваш 0.09863014 равен 3 / (365/12) как попытка перевести 3 произвольных дня в произвольные месяцы

> interval(startDate, endDate)
[1] 2015-02-27 UTC--2015-03-02 UTC

Ваш 0.1071429 равен 3/28 как попытка перевести 3 дня, начиная с февраля, не в високосный год, в месяцы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...