我正在进行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
答案 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进行处理。