为什么R中的as.Date函数会将我输入的年份转换为当前的2020年?

问题描述

我在数据框中有一些日期,当我使用as.Date()将它们转换为日期时,年份转换为2020,这实际上是无效的,因为该文件仅包含截至2018年的数据。

到目前为止我所拥有的:

> fechadeinsc1[2]
[1] "2020-08-15"

> class(fechadeinsc1)
[1] "Date"

> fechainsc[2]
[1] "2017/99/99"

> class(fechainsc)
[1] "character"

如您所见,fechadeinsc1转换为日期,fechainsc是原始数据框,其元素为字符。 “ fechadeinsc1”应该给同一年,不是吗?即使几天和几个月都无效。

一个示例

> fechadenac1[2]
[1] "2020-12-31"

> class(fechadenac1)
[1] "Date"

> fechanac[2]
[1] "12/31/2016"

> class(fechanac)
[1] "character"

同样,年份会改变。

我的代码

fechanac <- dat$fecha_nac
fechainsc <- dat$fecha_insc

fechadeinsc1 <- as.Date(fechainsc,tryFormats =c("%d/%m/%y","%m/%d/%y","%y","%d%m%y","%m%d%y"))
fechadenac1 <- as.Date(fechanac,"%m%d%y"))

“ dat”是原始数据框,其中包含2016年和2017年在厄瓜多尔注册的新生儿的信息,如果有人想要原始的.csv文件,请与我联系。

解决方法

基于strptime(从as.Date引用),您应在4位数的年份中使用大写字母Y:

%y无世纪的年份(00--99)。输入时,值00到68分别以20和69到99以19为前缀-这是2004年和2008年POSIX标准指定的行为,但它们也表示“预计在将来的版本中,默认世纪被推断从两位数的年份开始会发生变化。

%Y百年纪念。 [...]