R语言 as.带有两位数年份的日期

7kjnsjlb  于 2023-06-19  发布在  其他
关注(0)|答案(4)|浏览(93)

如果我将日期10.10.61(DD.MM.YY)转换为as.Date(date, format="%d.%m.%y"),由于某种原因,它将其转换为2061**-10-10
有没有一个优雅的方法来纠正这个问题,或者我必须手动地通过切片字符串并在前面添加“19”来纠正这个问题?
我也尝试了 * 动物园 * 包,带来了相同的(错误的)结果。

r8xiu3jd

r8xiu3jd1#

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

yebdmbv42#

请注意,一个sub将对字符串进行切片,并在year前面加上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

mum43rcc

mum43rcc3#

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

lymnna714#

如果你所有的日期都是过去的,但有些是在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"

相关问题