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 года, а затем вручную добавив количество дней, "пропавших без вести", но мне было интересно, возможно, что-то не так с функцией...? Я действительно не понимаю, что я мог сделать неправильно, так как я просто изменил номер дня...

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

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

0.96 = 23 hours / 24 hours

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

Другие вопросы по тегам