【问题标题】:R as.Date conversion century errorR as.Date 转换世纪错误
【发布时间】:2014-07-29 16:36:46
【问题描述】:

在我的数据集中,有一列包含许多员工的出生日期,其中许多员​​工的出生日期在 1960 年到 1980 年之间。我正在尝试使用 as.Date 对其进行格式化,其中一些结果并不符合我的预期。

例子:

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

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

【问题讨论】:

    标签: r date


    【解决方案1】:

    阅读:

    ?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"
    

    如果这投入生产,当您的员工年龄开始超过当前年份的最后两位数时,它将成为一个等待发生的错误。

    【讨论】:

    • 我认为 POSIX 委员会应该禁止两位数的年份并废弃 %y 格式。这些天我们不需要节省墨水......
    • 是的,对于那些无法影响其数据源并且定期以yy-mm-dd 格式提供服务的数据科学家来说,这将是非常棒的......我从经验中说,从不允许两位数的年份.我认为as.Date 函数应该有一个可选参数来设置它。
    猜你喜欢
    • 1970-01-01
    • 2017-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-05
    • 2017-11-22
    • 1970-01-01
    • 2018-06-05
    相关资源
    最近更新 更多