R difftime демонстрирует странное поведение

Меня немного смущает функция "difftime". Когда я вычисляю разницу во времени до 27 марта 2016 года, все в порядке. Но как только я пробую 28, 29, 30 или 31 марта 2016 года, возникает проблема:

> difftime("2016-03-27","1979-01-01", units="days")
Time difference of 13600 days
> difftime("2016-03-28","1979-01-01", units="days")
Time difference of 13600.96 days
> difftime("2016-03-31","1979-01-01", units="days")
Time difference of 13603.96 days

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


person user3270948    schedule 01.07.2016    source источник


Ответы (2)


Нет проблем, когда вы конвертируете его с помощью as.Date:

difftime(as.Date("2016-03-28"), as.Date("1979-01-01"), units="days")

# Time difference of 13601 days

Также нет проблем с lubridate:

library(lubridate)   
difftime(ymd("2016-03-28"), ymd("1979-01-01"), units="days")

# Time difference of 13601 days
person J_F    schedule 01.07.2016

Причина, по которой дополнительный день при переходе от 2016-03-27 к 2016-03-28 составляет 0.96, связана с переходом на летнее время:

0.96 = 23 hours / 24 hours

Прочтите этот блог R Nabble, в котором подробно обсуждается эта проблема.

person Tim Biegeleisen    schedule 01.07.2016