在R中,使用lubridate将hms对象转换为秒

tom*_*omw 7 r lubridate

在lubridate中的简单问题 - 我想将hms对象转换为自当天开始以来的适当秒数.

例如

library(lubridate)
hms("12:34:45")
Run Code Online (Sandbox Code Playgroud)

然后我想确切地知道12小时34分45秒是多长时间

一些明显的东西

seconds(hms("12:34:45"))
Run Code Online (Sandbox Code Playgroud)

回来

45s
Run Code Online (Sandbox Code Playgroud)

这不是我想要的.如何将这些hms值转换为秒?我想用lubridate

Ste*_*rga 23

R>lubridate::period_to_seconds(hms("01:00:00")) 
Run Code Online (Sandbox Code Playgroud)

从00:00:00或上面的情况给出预期的3600秒作为数字计数:

R>period_to_seconds(hms("12:34:45")) 
Run Code Online (Sandbox Code Playgroud)


Dir*_*tel 11

使用哪个包并不重要 - 它会将日期/日期时间对象转换为自纪元以来秒的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
Run Code Online (Sandbox Code Playgroud)

所以我们想秒:

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

我们可以投射到数字:

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

编辑: 回到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>
Run Code Online (Sandbox Code Playgroud)