Edit - у меня была опечатка в использовании 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)))