2014-09-26 3 views
8

У меня возникли проблемы с пониманием того, как использовать функцию guess_formats в lubridate. У меня есть вектор дат в некотором неизвестном наборе/порядке форматов. Я хотел бы преобразовать их в объект Date (или, по крайней мере, преобразовать как можно больше). Следующий код - это то, что я пробовал:guess_formats + R + lubridate

library(lubridate) 
sampleDates <- c("4/6/2004","4/6/2004","4/6/2004","4/7/2004", 
     "4/6/2004","4/7/2004","2014-06-28","2014-06-30","2014-07-12", 
     "2014-07-29","2014-07-29","2014-08-12") 
formats <- guess_formats(sampleDates, c("Ymd", "mdY")) 
dates <- as.Date(sampleDates, format=formats) 

Это дает все NA.

Это, очевидно, всего лишь короткий пример. В реальном случае я не знаю, где разбросаны различные форматы, и я не был бы на 100% уверен, что есть только% m /% d /% Y и% Y-% m-% d. Может ли кто-нибудь дать мне знать, либо A. Как бы использовать gt_formats в этом примере или B. есть ли что-то более подходящее для использования в lubridate/base R, надеюсь, без большого количества регулярных выражений. Благодаря!

Редактировать: Я также пробовал parse_date_time. То, что я не понимаю, следующие работы для этого примера:

parse_date_time(sampleDates, 
      orders = c("Ymd", "mdY"), 
      locale = "eng") 

Но это не делает:

parse_date_time(sampleDates, 
      orders = c("mdY", "Ydm"), 
      locale = "eng") 

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

Double Edit: Dur, OK, я вижу, у меня был Ymd в первом примере parse_date_time и Ydm во втором ... продолжайте.

ответ

10

Нет необходимости вызывать просто использовать parse_date_time:

parse_date_time(sampleDates, c("Ymd", "mdY")) 

[1] "2004-04-06 UTC" "2004-04-06 UTC" "2004-04-06 UTC" "2004-04-07 UTC" "2004-04-06 UTC" 
[6] "2004-04-07 UTC" "2014-06-28 UTC" "2014-06-30 UTC" "2014-07-12 UTC" "2014-07-29 UTC" 
[11] "2014-07-29 UTC" "2014-08-12 UTC" 

Внутренне он будет вызывать .

Смежные вопросы