在我的数据集中,一列包含许多员工的出生日期,因此很多人都在1960年至1980年的范围内。我正在尝试使用as.Date格式化它们,其中一些结果不符合我的期望。
示例:
as.Date("7/1/61","%m/%d/%y")
我希望它返回“1961-07-01”,但它返回“2061-07-01”。
答案 0 :(得分:2)
读:
?strptime # where all the formatting details are available
%Y
没有世纪的年份(00-99)。在输入时,值00到68的前缀为20和69到99乘以19 - 这是2004和2008 POSIX标准指定的行为,但他们也说'预计在未来的版本中,默认世纪是从两位数的年份将改变'。
所以你需要一个正则表达式来进行回溯,在发送到as.Date之前,它可能更适合作为字符串转换:
dvec <- c("7/1/61", "7/1/79")
as.Date( sub("/(..$)", "/19\\1",dvec) , "%m/%d/%Y")
[1] "1961-07-01" "1979-07-01"
如果这种情况投入生产,当员工的年龄开始超过当年的最后两位数时,将会出现错误。