从R中特定日期的特定时间转换秒数

Converting seconds from specific time on a specific date in R

如果之前有人问过这个问题,请投反对票并指导我。我一直在查看 SO,但似乎没有人需要非午夜开始时间,即每个人都想知道如何从特定的午夜值转换秒数。

我正在尝试将第二个值转换为数据值。我所拥有的是从 2017-05-21 22:00.

开始的秒数

我尝试使用 as.POSIXct() 函数,但是它似乎只考虑了 Y-m-d,如果我在它后面写 h:m 则忽略它。

例如 file$date = as.POSIXct(file$Time,origin = "2017-05-21 22:00") 给我

  Time         date
1 0.00         2017-05-22 00:00:00

我发现如果我用

file$Time = file$Time-3600*4

file$date = as.POSIXct(file$Time,origin = "2017-05-22")

出于某种原因给了我正确的输出,这当然是

  Time         date
1 0.00         2017-05-21 22:00:00

关于如何更优雅地执行此操作有任何想法吗?

此外,如果您知道为什么会给我正确的输出,我会洗耳恭听。

看看lubridate...

library(lubridate)
ymd_hm("2017-05-21 22:00") + seconds(1.01)

所以在你的情况下它会像

file$date <- ymd_hm("2017-05-21 22:00") + seconds(file$Time) 

您可以简单地尝试 as.POSIXct 转换您的开始时间,然后继续增加秒数。如:

as.POSIXct("2017-05-21 22:00:00", format = "%Y-%m-%d %H:%M:%S")
#[1] "2017-05-21 22:00:00 BST"
 as.POSIXct("2017-05-21 22:00:00", format = "%Y-%m-%d %H:%M:%S") + 1
#[1] "2017-05-21 22:00:01 BST"
 as.POSIXct("2017-05-21 22:00:00", format = "%Y-%m-%d %H:%M:%S") + 100
#[1] "2017-05-21 22:01:40 BST"
 as.POSIXct("2017-05-21 22:00:00", format = "%Y-%m-%d %H:%M:%S") + 300
#[1] "2017-05-21 22:05:00 BST

您甚至可以使用 tz 参数指定 time-zone 为:

as.POSIXct("2017-05-21 22:00:00", tz = "UTC", format = "%Y-%m-%d %H:%M:%S")
#[1] "2017-05-21 22:00:00 UTC"

as.POSIXct("2017-05-21 22:00:00", tz = "UTC", format = "%Y-%m-%d %H:%M:%S") + 96
#[1] "2017-05-21 22:01:36 UTC"