Почему функция as.Date в R преобразует годы, которые я вхожу в текущий 2020 год?

Aug 16 2020

У меня есть некоторые даты в фрейме данных, и когда я использую as.Date () для преобразования их в даты, годы преобразуются в 2020, что на самом деле неверно, потому что в файле есть данные только до 2018 года.

Что у меня есть на данный момент:

> fechadeinsc1[2]
[1] "2020-08-15"

> class(fechadeinsc1)
[1] "Date"

> fechainsc[2]
[1] "2017/99/99"

> class(fechainsc)
[1] "character"

Как видите, fechadeinsc1 был преобразован в дату, а fechainsc - это исходный фрейм данных, элементами которого являются символы. "fechadeinsc1" должен указывать тот же год, не так ли? Даже если дни и месяцы недействительны.

Другой пример :

> fechadenac1[2]
[1] "2020-12-31"

> class(fechadenac1)
[1] "Date"

> fechanac[2]
[1] "12/31/2016"

> class(fechanac)
[1] "character"

И снова год меняется.

Мой код :

fechanac <- dat$fecha_nac fechainsc <- dat$fecha_insc

fechadeinsc1 <- as.Date(fechainsc,tryFormats =c("%d/%m/%y","%m/%d/%y","%y","%d%m%y","%m%d%y"))
fechadenac1 <- as.Date(fechanac,tryFormats =c("%d/%m/%y","%m/%d/%y","%y","%d%m%y","%m%d%y"))

dat - это исходный фрейм данных, который содержит информацию о новорожденных, зарегистрированных в 2016 и 2017 годах в Эквадоре. Если кому-то нужен исходный файл .csv, свяжитесь со мной.

Ответы

1 tevemadar Aug 16 2020 at 01:39

Основываясь на strptimeссылке as.Date, вы должны использовать верхний регистр Y для 4-значных лет:

%yГод без века (00-99). При вводе значения от 00 до 68 имеют префикс 20, а от 69 до 99 - 19 - это поведение, определенное стандартами POSIX 2004 и 2008 годов, но они также говорят: «Ожидается, что в будущей версии век по умолчанию будет определяться. с 2-значного года изменится ».

%YГод с веком. [...]