在R中以毫秒为单位创建一系列时间戳

时间:2018-08-10 14:27:53

标签: r timestamp time-series unix-timestamp sequences

我的开始日期为“ 2017-11-14 10:11:01 CET”,结束日期为“ 2017-11-15 01:15:59 CET”。我想在这些开始和结束时间戳之间分别创建500毫秒的时间戳。例如。我需要一个包含以下输出的数据框

timestamp
2017-11-14 10:11:01.000
2017-11-14 10:11:01.500
2017-11-14 10:11:02.000
2017-11-14 10:11:02.500
.
.
.
2017-11-15 01:15:59.000

不知何故,我使用以下代码设法获得了以毫秒为单位的开始和结束日期:

start.date <- strptime("2017-11-14 10:11:01 CET", "%Y-%m-%d %H:%M:%OS")
start.date <- format(start.date, "%Y-%m-%d %H:%M:%OS3")
Output: "2017-11-14 10:11:01.000"

类似地,我将结束日期定为2017-11-15 01:15:59.000。我现在想使用序列函数来创建每个500毫秒的时间戳序列。我做了类似的事情

seq.POSIXt(as.POSIXct(start), as.POSIXct(end), units = "milliseconds", by = 500)

但是它创建了一系列的20秒。例如,

"2017-11-14 10:11:01 CET" 
"2017-11-14 10:19:21 CET" 
"2017-11-14 10:27:41 CET"
.
.
.
"2017-11-15 01:11:01 CET"

一旦能够获得本系列,我还想将其转换为UNIX时间戳。 有人可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

我不知道这是您要找的东西,但似乎可以正常工作

seq.POSIXt(as.POSIXct(start), as.POSIXct(end), units = "seconds", by = .5)

答案 1 :(得分:0)

当您使用函数as.integer时,它将去除数字的小数部分,在您的情况下为毫秒。

我建议您使用此替代方法以UNIX格式获取所需的数字。 为了获得所需的输出,您可以将函数的输出作为整数,然后在所需的末尾附加。 由于UNIX时间戳记的后三位只能等于000或500,因此您可以尝试:

k<-as.numeric(seq.POSIXt(as.POSIXct(start.date), as.POSIXct(stop.date), units = "seconds", by = .5))[1:4]


k1<-cbind(substr(as.character(k), 1, 10),c("000","500"))

as.numeric(paste0(k1[,1],k1[,2]))
[1] 1510650661000 1510650661500 1510650662000 1510650662500

请注意,我仅对向量的前4个元素执行此操作,但是逻辑保持不变。