R语言使用AS后结果将是NA或不同.日期

  • 本文关键字:NA 日期 结果 语言 AS r
  • 更新时间 :
  • 英文 :


我正在做EDA案例研究,我遇到了一个日期转换问题。 使用 as 后,数字会有所不同。日期函数。

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

%y指定 2 位数字年份,我们需要 4 位数字年份%Y

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 标准指定的行为,但它们也确实说"预计在未来版本中,从 2 位数年份推断出的默认世纪将发生变化"。

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

虽然,format没有记录在?as.Date中,但它提供了一个指向strptime的链接,以检查format

设置
字符串格式。如果未指定,它将在第一个非 NA 元素上逐个尝试 tryFormats,如果不起作用,则给出错误。否则,处理是通过 strptime 进行的。

最新更新