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
如果我出于某种原因将日期 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