【问题标题】:How to parse both of these date formats?如何解析这两种日期格式?
【发布时间】:2019-09-09 17:45:59
【问题描述】:

格式为4/29/2016 的日期被正确解析,但格式为62420162042016 的日期未被解析。

R 是否认为某些没有斜线的日期在第一天而不是月份?

我尝试在lubrdiate 中包含dmy,但它仍然不起作用。

我试过查看Sys.getlocale("LC_TIME"),它给了我"English_United States.1252"

demo$date <- as.character(demo$date)
demo <- demo %>%
      mutate(date = parse_date_time(date, "mdy"))

【问题讨论】:

  • 2042016 可能不明确:是 “第 4 个月的第 20 天” 还是 “第 4 个月的第 2 天”。虽然“0”应该与“2”一起出现似乎很明显,但在代码中推断这一点并不总是完美的。 (我对lubridate 不够了解,不知道它是否/如何在那里工作。)

标签: r date lubridate


【解决方案1】:

您可以使用 stringr 将日期全部转换为相同的格式。然后转换成数值,使用 lubridate 进行解析。

library(stringr)
library(lubridate)

dates <- c("6242016", "2042016", "4/29/2016")
dates <- str_remove_all(dates, "/")
dates <- as.numeric(dates)

lubridate::mdy(dates)

# [1] "2016-06-24" "2016-02-04" "2016-04-29"

【讨论】:

  • 还是说12解析失败。我想解析 4/29/2016 和 6242016 的格式。
  • @blaze 我更新了我的答案以使代码解析两种格式。
【解决方案2】:
as.Date(sprintf("%08d", 
         as.numeric(gsub("/", "",  c("6242016", "2042016", "4/29/2016")))), 
         format = "%m%d%Y")

 # [1] "2016-06-24" "2016-02-04" "2016-04-29"

【讨论】:

    【解决方案3】:

    这个

    as.Date("2042016", "%m%d%Y")
    

    返回 NA 而不是

    as.Date("02042016", "%m%d%Y")

    这是因为月份必须用两位数 (00-12) 表示

    尝试在 [1,9] 范围内的月份中添加前导零。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-09
      • 1970-01-01
      • 2020-09-14
      • 2020-07-04
      相关资源
      最近更新 更多