2017-01-06 2 views
2

В моей таблице данных есть столбец с «двусмысленным» форматом даты и времени: «12/1/2016 15:30». Как я могу преобразовать это datetime в формат R, распознаваемый в таблице данных без использования strptime() и получение предупреждающего сообщения для первоначального преобразования в POSIXlt. Процесс работает, но предупреждение заставляет меня думать, что есть другой путь.Как преобразовать неоднозначный столбец datetime в data.table без использования strptime?

Мои данные таблицы:

my_dates <- c("12/1/2016 15:30", "12/1/2016 15:31", "12/1/2016 15:32") 
this <- c("a", "b", "c") 
that <- c(1, 2, 3) 

my_table <- data.table(my_dates, this, that) 

my_table 
    my_dates   this that 
1: 12/1/2016 15:30 1 a 
2: 12/1/2016 15:31 2 b 
3: 12/1/2016 15:32 3 c 

my_table[, my_dates := as.POSIXct(strptime(my_dates, "%m/%d/%Y %H:%M"))] 

Warning message: 
In strptime(my_dates, "%m/%d/%Y %H:%M") : 
POSIXlt column type detected and converted to POSIXct. We do not 
recommend use of POSIXlt at all because it uses 40 bytes to store one date. 

Таким образом, он работает, но я держал пари, что это метод, который я просто забываю, чтобы избежать этого предупреждения. Я использовал my_table[, dates:= as.POSIXct(dates)], но это уменьшает временную часть даты и времени. Я также пробовал my_table[, dates:= as.POSIXct(dates, "%m/%d/%Y %H:%M")], и время также отбрасывается, и предупреждения возвращаются.

Благодарим за совет.

ответ

2

Нам нужен format аргумент, и он может быть преобразован с использованием в одиночку as.POSIXct, не прибегая к strptime/as.POSIXct

my_table[, my_dates := as.POSIXct(my_dates, format = "%m/%d/%Y %H:%M")] 
my_table 
#    my_dates this that 
#1: 2016-12-01 15:30:00 a 1 
#2: 2016-12-01 15:31:00 b 2 
#3: 2016-12-01 15:32:00 c 3 

Причина предупреждения из-за порядка аргументов в as.POSIXct/strptime. Если мы проверим? as.POSIXct, использование является

as.POSIXct (х, TZ = "", ...)

Это означает, что без указания format, он считает, что второй аргумент для tz

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