R as.Date转换世纪错误

时间:2014-07-29 16:36:46

标签: r date

在我的数据集中,一列包含许多员工的出生日期,因此很多人都在1960年至1980年的范围内。我正在尝试使用as.Date格式化它们,其中一些结果不符合我的期望。

示例:

as.Date("7/1/61","%m/%d/%y")

我希望它返回“1961-07-01”,但它返回“2061-07-01”。

1 个答案:

答案 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"

如果这种情况投入生产,当员工的年龄开始超过当年的最后两位数时,将会出现错误。