Как отформатировать несколько форматов даты в один в R? - PullRequest
0 голосов
/ 27 марта 2019

Я пытаюсь получить один столбец дат, чтобы все были одинаково отформатированы в R. Однако существует множество разных версий даты.

Я смотрел другие ответы на stackoverflow, но ни один из них не включал все эти версии даты (например, 4 июля 1999 г.):

  • 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

Я попытался удалить все «-» и «/», поэтому у меня остались только цифры, но, похоже, проблема в днях / месяцах, которые состоят только из одной цифры. Я пытался

if(nchar(data$birthday) == 6) (data$birthday = paste0("0", data$birthday))

, но это решает проблему, только если месяц написан одной цифрой.

Я думаю, это самое близкое, но оно все еще выдает ошибки.

data$newbirthday <- multidate(data$birthday, c("%m%d%Y", "%m%d%y", "%m/%d/%Y", "%m/%d/%y","%m-%d-%Y","%m-%d-%y")    
  • Результаты этого формата в двух версиях в порядке: 07/04/99 и 07-04-99
  • Но две версии переключают год на 2019: 07/04/1999 и 07-04-1999
  • И две версии: NA: 741999, 7499

1 Ответ

1 голос
/ 27 марта 2019

Я бы использовал 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, является правильным результатом, поскольку эти даты не могут (и не должны получаться) анализироваться.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...