2012-07-02 3 views
4

простой вопрос в lubridate - я хочу преобразовать объект hms в соответствующее количество секунд с начала дня.В R используйте lubridate для преобразования объектов hms в секунды

Например

library(lubridate) 
hms("12:34:45") 

, то я хочу, чтобы точно знать, сколько времени 12 часов, 34 минут и 45 секунд находится в секундах

что-то очевидное, как

seconds(hms("12:34:45")) 

просто возвращает

45s 

, которого я не хочу. Как преобразовать эти значения hms в секунды? Я бы хотел использовать lubridate

+0

'as.duration()' возможно? – joran

ответ

8

Не имеет значения, какой пакет вы используете - он преобразует объект date/datetime в представление POSIXct секунд с эпохи. Таким образом, вы можете также сделать это в базе R - так здесь развернуть ISOdatetime() с произвольным день, используя сегодня:

R> difftime(ISOdatetime(2012,7,2,12,34,45), ISOdatetime(2012,7,2,0,0,0)) 
Time difference of 12.5792 hours 

Так что мы хотим секунд:

R> difftime(ISOdatetime(2012,7,2,12,34,45), ISOdatetime(2012,7,2,0,0,0), 
+   unit="secs") 
Time difference of 45285 secs 

И мы можем бросить на номера:

R> as.numeric(difftime(ISOdatetime(2012,7,2,12,34,45), + 
         ISOdatetime(2012,7,2,0,0,0), unit="secs")) 
[1] 45285 

Edit: И возвращаясь к lubridate, это, возможно, ошибка:

> hms("12:34:45") - hms("00:00:00") 
[1] 12 hours, 34 minutes and 45 seconds 
R> as.numeric(hms("12:34:45") - hms("00:00:00")) 
[1] 45 
R> 
+0

Да, это будет более точно, чем просто 'as.duration', который (я думаю) просто преобразует каждую часть в число« по умолчанию »секунд. В lubridate вам придется сначала преобразовать его в интервал, который, в основном, вы делаете здесь, я думаю. – joran

+0

lubridate не изобретает новые типы времени, так что ваш предлагаемый as.duration() может работать, или, может быть, разница с hms («00:00:00») или ... –

+0

спасибо за этот отличный ответ Dirk. – tomw

16
R>lubridate::period_to_seconds(hms("01:00:00")) 

дает ожидается 3600 секунд, как цифровой отсчет с 00:00:00 или в случае выше:

R>period_to_seconds(hms("12:34:45")) 
Смежные вопросы