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

#r #as.date

#r #as.date

Вопрос:

У меня есть некоторые даты во фрейме данных, и когда я использую 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.Попробуйте с anydate из anytime anydate(c("2020-08-15", "12/31/2016")) [1] "2020-08-15" "2016-12-31"

Ответ №1:

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

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

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

Комментарии:

1. Есть идеи о том, как избавиться от / 99 / 99? Я имею в виду, как я могу сохранить или использовать только год?

2. Вы можете проверить, tryFormats принимает ли такой шаблон, как "%Y/99/99" , практически обрабатывая часть / 99 / 99 как какой-то странный разделитель.