Изменить формат даты в R

Итак, у меня есть фрейм данных, в котором есть столбцы даты, и все столбцы могут иметь разные форматы.

> DateCol1      DateCol2     DateCol3       DateCol4      DateCol5
> 24-08-2011   2011-12-24     08/1900/24    12/13/2011    Jan 31 1895

Я знаю, что могу использовать strptime / as.Date / as.POSIXct для каждого из них индивидуально, но поскольку фрейм данных будет сгенерирован во время выполнения, я не буду знать его содержимое заранее

Итак, как мне преобразовать их все в формат R по умолчанию в универсальной функции / операторе?


person blank    schedule 27.09.2013    source источник
comment
lubridate - ваш друг. install.packages("lubridate")   -  person Ricardo Saporta    schedule 27.09.2013
comment
Независимо от того, какой пакет вы используете, эту задачу невозможно выполнить автоматически. Как определить, является ли 01-02-2013 1st of February или 2nd of January, хотя бы без какой-либо информации от себя?   -  person thelatemail    schedule 27.09.2013
comment
вы правы, и я думаю, мне может понадобиться придумать некоторые предопределенные постоянные форматы   -  person blank    schedule 27.09.2013


Ответы (1)


Попробуйте использовать guess_formats из пакета lubridate:

library(lubridate)
fmts <- lapply(dat, guess_formats, c("m d y", "d-M-y", "Y-m-d",  "m Y d"))
fmts <- lapply(fmts, "[[", 1)
as.data.frame(mapply(parse_date_time, x=dat, orders=fmts))
person Ricardo Saporta    schedule 27.09.2013
comment
Это может быть возможным решением, но это все еще зависит от моего знания всех возможных форматов .... но я думаю, как прокомментировал @thelatemail, это может быть довольно пугающим без некоторого ввода - person blank; 27.09.2013
comment
конечно. Вы просите машину принять решение, не предоставляя ей всей информации, необходимой для принятия такого решения. Что работает с guess_formats, так это то, что вы можете дать ему несколько вариантов, и он вернет то, что сработало (а что нет). Поиграйте с этим и добавьте немного человеческих знаний;) - person Ricardo Saporta; 27.09.2013