2017-01-31 2 views
0

Я прочитал список из числа csv-файлов. Он включает в себя такие цифры, как 731961,731962,731966,731967,731968, и они должны соответствовать 2004-01-15,2004-01-16,2004-01-20,2004-01-21,2004-01-22.Не удалось преобразовать порядковые номера чисел в нужную дату

Однако, когда я попытался преобразовать числа в R, результирующие даты были неправильными, например, as.Date(731961,origin="1900-01-01") --> "3904-01-17".

Что я здесь сделал неправильно?

+0

'as.Date' с целым числом задает количество дней с указанного начала. 731 + тысяча дней с 1900 года - около 2000 лет. – lmo

+2

Попробуйте origin = "0-01-01". – Haboryme

ответ

1

Следуя за комментариями, проблема в том, что начало даты неверно. Вы можете видеть, что если подсчитать даты, и посмотреть, как далеко они:

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") 

Дает правильные даты.

Смежные вопросы