R语言使用as.Date后的结果将是NA或不同

时间:2019-06-12 14:59:46

标签: r

我正在进行EDA案例研究,我遇到了日期转换问题。 使用as.Date函数后,该数字将有所不同。

dates <- pm0$Date
> str(dates)
 int [1:1304287] 20120101 20120104 20120107 20120110 20120113 20120116 20120119 20120122 20120125 20120128 ...

dates <- as.Date(as.character(dates), "%y%m%d")
> str(dates)
 Date[1:1304287], format: "2020-12-01" "2020-12-01" "2020-12-01" "2020-12-01" "2020-12-01" ...

## the date is changed from 20120101 to 20201201 and all the results are the same

## If i modify the code to be (format = "%y-%m-%d") the result will be NA

1 个答案:

答案 0 :(得分:5)

%y指定2位数的年份,我们需要%Y表示4位数的年份。

as.Date("20120101", "%Y%m%d")
#[1] "2012-01-01"

如果我们执行%y,则它与前两位数字20匹配为年份,并在默认情况下以20前缀,它将附加当前时代,然后月份与“ 12”,然后下一个01,剩下最后一个01

as.Date("20120101", "%y%m%d")
#[1] "2020-12-01"

它也记录在?strptime

  

%y   没有世纪的年份(00–99)。在输入时,值00到68分别以20和69到99分别以19为前缀-这是2004和2008 POSIX标准指定的行为,但是他们也说'预计在将来的版本中,默认世纪是根据两位数的年份将会改变。”

     

%Y   年与世纪。请注意,原始格里高利历中没有零,但ISO 8601:2004将其定义为有效(解释为1BC):请参见https://en.wikipedia.org/wiki/0_(year)。请注意,该标准还规定,日历中1582年之前的年份只能在相关各方同意的情况下使用。

尽管format没有记录在?as.Date中,但是它提供了指向strptime的链接以检查format

  

格式
  字符串。如果未指定,它将在第一个非NA元素上尝试tryFormats一个接一个,如果没有成功则给出错误。否则,将通过strptime进行处理。