10

lubridate 中的一个简单问题——我想将一个 hms 对象转换为自一天开始以来的适当秒数。

例如

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

那么我想知道 12 小时 34 分 45 秒到底有多长,以秒为单位

明显的东西

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

刚回来

45s

这不是我想要的。如何将这些 hms 值转换为秒?我想使用润滑脂

4

2 回答 2

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

从 00:00:00 或在上述情况下,给出预期的 3600 秒作为数字计数:

R>period_to_seconds(hms("12:34:45")) 
于 2012-12-09T19:54:36.637 回答
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

所以我们想要几秒钟:

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

编辑: 回到 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>
于 2012-07-02T17:41:47.340 回答