2015-08-13 6 views
0

Dataset имеет столбец Connect.Time со следующей структурой:Анализировать с lubridate R

$ Connect.Time  : chr "7/11/2015 5:53 AM" 

С пакетом lubridate я изменить его в курсе часов & минут упоминается. Этот код не работает и возвращает NA

W$Connect.Time <- as.Date(W$Connect.Time, format = "%m/%d/%Y %H:%M") 

Это дает мне «2015-07-11», но R не показывают часы и минуты. При попытке извлечь их час (W $ Connect.Time) он даст мне 0 Я не уверен, что делать с AM/PM. Как правильно разобрать его с помощью пакета lubridate? Я хочу, чтобы иметь возможность рассчитать продолжительность WiFi сессий в течение нескольких минут

+1

'as.Date' не является функцией lubridate, а базой R. Функция lubridate' dmy_hm (x) 'работает хорошо. – SabDeM

+0

dmy_hm (x) отлично работает. Просто игнорируйте обозначения AM/PM? –

+0

@Diederik, как я показал в своем ответе, функция lubridate не игнорирует AM и PM, она просто распознает их все и делает правильное преобразование. – SabDeM

ответ

0

С lubridate вы должны разобрать его:

library(lubridate) 
x <- "7/11/2015 5:53 AM" 
dmy_hm(x) 
[1] "2015-11-07 05:53:00 UTC" 

Пакет достаточно умен, чтобы признать AM и PM в ваших данных, так что не беспокойтесь об этом. Смотрите код:

y <- "7/11/2015 5:53 PM" 
dmy_hm(y) 
[1] "2015-11-07 17:53:00 UTC" 

вещь, которая может быть ваше беспокойство, если tz аргумент, чтобы установить правильный часовой пояс.

3

Вы можете использовать as.POSIXct(). Но для правильного ввода AM/PM вам нужно будет использовать %I:%M в течение нескольких часов и минут вместо %H:%M, так как %H не работает с %p (символ AM/PM). Заметьте, что они также должны быть кепками.

## July 11, 2015 5:53 am 
as.POSIXct("7/11/2015 5:53 AM", format = "%m/%d/%Y %I:%M %p") 
# [1] "2015-07-11 05:53:00 PDT" 

## July 11, 2015 5:53 pm 
as.POSIXct("7/11/2015 5:53 PM", format = "%m/%d/%Y %I:%M %p") 
# [1] "2015-07-11 17:53:00 PDT" 
Смежные вопросы