Как дата с двузначными годами

Если я конвертирую дату 10.10.61 (ДД.ММ.ГГ) с as.Date(date, format="%d.%m.%y") по какой-то причине он превращает его в 2061-10-10.

Есть ли элегантный способ исправить это, или мне нужно сделать это вручную, разрезав строку и добавив "19" впереди?

Я также попробовал пакет зоопарка, который выдает тот же (неправильный) результат.

4 ответа

Решение
x = format(as.Date("10.10.61", "%d.%m.%y"), "19%y-%m-%d")
x = as.Date(x)
x
class(x)

Обратите внимание, что один sub нарежем строку и добавим год к 19, так что это не так обременительно:

as.Date(sub("(..)$", "19\\1", date), "%d.%m.%Y")
## [1] "1961-10-10"

chron Альтернативно, для пакета chron по умолчанию установлено значение 30, поэтому он будет использовать 1961 по умолчанию:

library(chron)
as.Date(dates(date, format = "d.m.y"))
## [1] "1961-10-10"

В хрононе правило расширения года определяется "chron.year.expand" опция, которая по умолчанию установлена ​​на year.expand функция и функция по умолчанию cut.off См. этот пост SO для получения дополнительной информации: Добавьте правильный век к датам с указанием года "Год без века", %y

Если все ваши даты в 1900-х годах, то вы можете использовать это решение:

library(magrittr)
your_date = '10.10.61'
as.Date(your_date,format="%d.%m.%y") %>% format("19%y%m%d") %>% as.Date("%Y%m%d")

Если все ваши даты находятся в прошлом, но некоторые из них относятся к 2000-м годам (например, даты рождения), вы можете использовать это решение:

      origDates = c('10.10.61','10.10.01')

badDates = as.Date(origDates,'%d.%m.%y')
badDates
## [1] "2061-10-10" "2001-10-10"

goodDates = ifelse(badDates > Sys.Date(),
                   format(badDates,'19%y-%m-%d'),
                   format(badDates,'%Y-%m-%d'))
newDates = as.Date(goodDates)
newDates
## [1] "1961-10-10" "2001-10-10"
Другие вопросы по тегам