Следуя за комментариями, проблема в том, что начало даты неверно. Вы можете видеть, что если подсчитать даты, и посмотреть, как далеко они:
inDates <- c(731961,731962,731966,731967,731968)
correctDates <- as.Date(c("2004-01-15","2004-01-16","2004-01-20","2004-01-21","2004-01-22"))
wrongDates <- as.Date(inDates, origin = "1900-01-01")
difftime(wrongDates, correctDates, units = "days")
Они выключены на 693,962 дней от точной даты, предполагая, что происхождение неправильно. Установка источника на 0-01-01
, поскольку предложенная @Haboryme приближается, но по-прежнему отключена на один день. Я предполагаю, что есть либо високосная ошибка, либо серийные номера хотели, чтобы 1 января года 0 равнялся 1, а не 0. Я не могу установить источник в дату BCE (возможно, есть способ, но когда я нашел работу, я ее схватил). Итак, я вычитаю один из дат ввода и устанавливаю источник
as.Date(inDates - 1, origin = "0000/01/01")
Однако это также предлагает альтернативу. Если у вас есть серийные нумерованные даты, подобные этому в обычном порядке, и происхождение меняется, играя вокруг, чтобы найти происхождение, это боль в заднем конце. Однако, если вы знаете некоторые даты и можете подтвердить, что все они используют одно и то же происхождение, вы можете вычесть offBy
сверху с каждого нового ввода, чтобы получить правильные даты (при условии, что вы используете одно и то же происхождение).
as.Date(inDates - as.numeric(offBy[1]), origin = "1900-01-01")
Дает правильные даты.
'as.Date' с целым числом задает количество дней с указанного начала. 731 + тысяча дней с 1900 года - около 2000 лет. – lmo
Попробуйте origin = "0-01-01". – Haboryme