【问题标题】:Why does lubridate::mdy() add day when it is missing from my input?为什么 lubridate::mdy() 在我的输入中缺少日期时会添加日期?
【发布时间】:2020-09-16 18:19:38
【问题描述】:

我故意在这段代码中省略了一天,并希望它失败、返回警告或返回不完整的记录。

txt <-  "January 2010"
lubridate::mdy(txt)

输出为“2010-01-20”。为什么当一天不是我的输入时,它包括“20”?该值背后的逻辑是什么?

【问题讨论】:

  • 因为日期也包括一天。你可能需要lubridate::myd(paste(txt, '01'))
  • 毫无疑问,但为什么是 20 而不是 0-31 范围内的其他数字?还是随机的?
  • mdy 正在寻找月份和年份。在这里,缺少一天,它假设 2 位数字 20 为天,最后 2 位数字为 2010 年

标签: r tidyverse lubridate


【解决方案1】:

与解析的顺序有关。根据?mdy

在异构日期格式的情况下,ymd() 系列会根据输入向量的子集猜测格式。如果输入向量包含许多缺失值或非日期字符串,则子集可能不包含有意义的日期

原始字符串包括月份和 4 位数年份,mdymonthday yearyear 可以是 2 位数或 4 位数。现在,有一个混乱,它选择 2 位数的年份作为“10”,而日期被解析为“20”。相反,如果我们添加一天然后使用mdy,它将被解析为 4 位数的年份

lubridate::myd(paste(txt, '01'))
#[1] "2010-01-01"

【讨论】:

    猜你喜欢
    • 2020-05-07
    • 2019-04-17
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多