Я бы использовал lubridate
для гибкого (и умного) анализа различных форматов дат.
В вашем случае мы получаем
ss <- c(
"7/4/99", "07/04/99", "7/4/1999",
"07/04/1999", "070499", "7499",
"07041999", "741999", "7-4-99",
"07-04-99", "7-4-1999", "07-04-1999")
library(lubridate)
dmy(ss)
#[1] "1999-04-07" "1999-04-07" "1999-04-07" "1999-04-07" "1999-04-07"
#[6] NA "1999-04-07" NA "1999-04-07" "1999-04-07"
#[11] "1999-04-07" "1999-04-07"
#Warning message:
# 2 failed to parse.
Осталось две (неоднозначные) датыкоторые дают NA
.Обратите внимание, что все даты, которые были признаны lubridate::dmy
, являются правильными.
Плохие здесь "7499"
и "741999"
, которые являются неоднозначными;например, рассмотрим "11199"
: это должно быть "11 января 1999" или "1 ноября 1999"?Там нет никакого способа сказать.То же самое для "1111999"
.
Таким образом, lubridate
, возвращающий NA
, является правильным результатом, поскольку эти даты не могут (и не должны получаться) анализироваться.