as.Date 两位数年份

as.Date with two-digit years

如果我出于某种原因将日期 10.10.61 (DD.MM.YY) 转换为 as.Date(date, format="%d.%m.%y"),它会将其转换为 2061-10-10.

有没有一种优雅的方法可以解决这个问题,还是我必须通过切割字符串并在前面添加“19”来手动完成?

我也尝试了 zoo 包,它产生了相同(错误)的结果。

x = format(as.Date("10.10.61", "%d.%m.%y"), "19%y-%m-%d")
x = as.Date(x)
x
class(x)

如果你所有的日期都在 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")

请注意,单个 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 中,年份扩展规则由 "chron.year.expand" 选项定义,该选项默认设置为 year.expand 函数,该函数的默认值 cut.off 为 30。请参阅此 SO post 了解更多信息: Add correct century to dates with year provided as "Year without century", %y