конвертировать смешанные форматы даты во фрейм данных - PullRequest
2 голосов
/ 18 января 2012

Я извлек данные во фрейм данных с датами смешанного формата, которые необходимо консолидировать. Структура фрейма данных выглядит следующим образом:

dateDF <- structure(list(id = 1:7, value = c(5813L, 8706L, 4049L, 5877L, 
1375L, 2223L, 3423L), date = structure(c(4L, 3L, 2L, 1L, 7L, 
6L, 5L), .Label = c("??:?? 05-Dec-11", "??:?? 06-Dec-11", "??:?? 07-Dec-11", 
"??:?? 19-Dec-11", "30/12/2011 16:00", "30/12/2011 16:45", "31/12/2011 19:10"
), class = "factor")), .Names = c("id", "value", "date"), row.names = c(NA, 
-7L), class = "data.frame")

Я использовал dateDF$date <- str_replace(string=dateDF$date, pattern='\\?\\?\\:\\?\\? ', '12:00 ') для производства:

id  value   date
1   5813    12:00 19-Dec-11
2   8706    12:00 07-Dec-11
3   4049    12:00 06-Dec-11
4   5877    12:00 05-Dec-11
5   1375    31/12/2011 19:10
6   2223    30/12/2011 16:45
7   3423    30/12/2011 16:00

Теперь мне нужно преобразовать 4 верхние даты в формате hh:mm dd-mmm-yy в формат, соответствующий нижним трем форматам даты dd/mm/yyyy hh:mm для каждого случая, когда в столбце существует первый формат.

Любая помощь приветствуется.

J.

1 Ответ

4 голосов
/ 18 января 2012

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

dateDF$date <- as.POSIXlt( 
  dateDF$date, 
  format = ifelse( 
    grepl("[a-z]", d$date), 
    "%H:%M %d-%b-%y", 
    "%d/%m/%Y %H:%M" 
  ) 
)
...