as.Date () Неправильный вывод из расчета дня года - PullRequest
0 голосов
/ 09 октября 2019

Я пытаюсь использовать набор данных, который использует День года (DOY) и хочу вычислить даты:

Чтобы преобразовать формат DOY в дату, которую я использую:

as.Date(DOY, origin = "%Y-01-01")

НоКажется, у меня проблема. Например: DOY = 121 для 2003

as.Date(121, origin = "2003-01-01")
[1] "2003-05-02"

Это должно быть: "2003-05-01" (см. Здесь: https://asd.gsfc.nasa.gov/Craig.Markwardt/doy2003.html)

Код работает для високосного года:

as.Date(121, origin = "2004-01-01")
[1] "2004-05-01"

(и отображается правильно здесь: https://asd.gsfc.nasa.gov/Craig.Markwardt/doy2004.html)

Проблема сохраняется для 2005.

Я что-то упускаю здесь очевидное или проблема вкод отсутствует високосные годы?

1 Ответ

0 голосов
/ 09 октября 2019

as.Date will accept numeric data (the number of days since an epoch), but only if origin is supplied.

https://www.rdocumentation.org/packages/base/versions/3.6.1/topics/as.Date

Таким образом, если вы преобразуете целое число в дату, целое число будет подсчитывать количество дней, прошедших с моментаorigin, что означает, что дата будет днем ​​ после последний день прошел пройдено

Альтернативой может быть использование юлианской даты

as.Date('2005-121', '%Y-%j')

даст

[1] "2005-05-01"

...