2016-01-19 2 views
1

Я пытаюсь разобраться в разборе 12-часового времени, используя lubridate. Если я бегуРазбор 12-часового раза с использованием lubridate

library(lubridate) 
times <- c("1:30 AM", "6:29 AM", "6:59 AM", "9:54 AM", "2:45 PM") 
hm(times) 

Я получаю

[1] "1H 30M 0S" "6H 29M 0S" "6H 59M 0S" "9H 54M 0S" "2H 45M 0S" 

Обратите внимание, что обозначение AM/PM не используется. Однако, если, если временные строки также включают в себя дату, то синтаксический работает

ymd_hm(paste("01-01-01", times)) 
[1] "2001-01-01 01:30:00 UTC" "2001-01-01 06:29:00 UTC" 
[3] "2001-01-01 06:59:00 UTC" "2001-01-01 09:54:00 UTC" 
[5] "2001-01-01 14:45:00 UTC" 

Мне кажется, что время разбора функции: hm, hms ... не признает AM/PM, но функции даты. Можно ли разрешить 12-часовой синтаксический анализ, не пропуская даты?

[Я знаю, что могу сделать это путем разбора строк, но мне было интересно, это было возможно в рамках lubidate]

ответ

3

два объекта принадлежат к разным классам каждый из которых предназначен для определенной цели.

С помощью первой функции вы создаете объект класса period. Этот класс, если он предназначен для представления времени, например, времени гонки, или «сколько часов Болт работает на 100 метров?» 0 часов 0 минут 9 секунд 58 и так далее.

См:

a <- hm(times) 
class(a) 
[1] "Period" 
attr(,"package") 
[1] "lubridate" 

Второй объект с функцией ymd_hm создает объект класса:

b <- ymd_hm(paste("01-01-01", times)) 
class(b) 
[1] "POSIXct" "POSIXt" 

Этот класс объекта предназначен для представления «времени», в том смысле, григорианский календарь (или, возможно, другой вид календарей). Он также анализирует AM/PM, которые имеют жизненно важное значение для дифференциации часов в течение 12 часов.

+0

Спасибо! Я полагаю, что невозможно напрямую интерпретировать POSIXct времени. – ekstroem

+0

@ekstroem Я так думаю. – SabDeM