as.Date有两位数的年份

时间:2017-10-10 08:30:29

标签: r date as.date

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

是否有一种优雅的方法来纠正这个问题,或者我必须通过切割字符串并添加" 19"来手动完成。在前面?

我还尝试了 zoo 包,这会导致相同(错误)的结果。

3 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:1)

请注意,单个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帖子了解更多信息: Add correct century to dates with year provided as "Year without century", %y

答案 2 :(得分:0)

如果您的所有日期都在20世纪,那么您可以使用此解决方案:

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")