首页 > 解决方案 > 一列R中的不同日期格式

问题描述

我有一列具有不同的日期格式:

我试图用任何时间功能解决这个问题,但我得到了第二种格式的 NA。

library(anytime)

dates <- c("2017-01-23 00:00:00.000",
           "2017-1-23 00:00:00.000",
           "20.02.2017 11:15",
           "2.2.2017 11:15")

anytime(dates)

[1] "2017-01-23 CET" "2017-01-23 CET" NA               NA   

有没有办法做到这一点?

标签: rdate

解决方案


dmy_hms编辑——我在使用它应该在的地方有一个错字dmy_hm

这种方法依赖于字符串中有关于使用哪种格式的线索。在这里,我假设所有日期都在 2010 年到 2019 年底之间,并且日-月-年字符串都在日期的各个部分之间使用了一个点。

library(tidyverse); library(lubridate); 
dates %>% 
  enframe() %>%
  # Edit -- better solution
  mutate(dates = case_when(value %>% str_detect("\\d{4}\\-") ~ ymd_hms(dates), 
                       TRUE ~ dmy_hm(dates)))
# A tibble: 4 x 3
   name value                   dates              
  <int> <chr>                   <dttm>             
1     1 2017-01-23 00:00:00.000 2017-01-23 00:00:00
2     2 2017-1-23 00:00:00.000  2017-01-23 00:00:00
3     3 20.02.2017 11:15        2017-02-20 11:15:00
4     4 2.2.2017 11:15          2017-02-02 11:15:00


  # old solution
  mutate(dates = case_when(value %>% str_detect(".201") ~ dmy_hm(dates), 
                           TRUE ~ ymd_hms(dates)))

推荐阅读