在 R 中创建一系列沿毫秒的时间戳
Create a series of timestamps along milliseconds in R
我的开始日期为“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时间戳。
有人可以帮我解决这个问题吗?
我不知道这是否是您要找的,但它似乎有效
seq.POSIXt(as.POSIXct(start), as.POSIXct(end), units = "seconds", by = .5)
当您使用函数 as.integer 时,它会去掉数字的小数部分,在您的例子中,就是毫秒。
我建议您使用此解决方法来获取所需的 UNIX 格式数字。
为了获得所需的输出,您可以获取函数 as.integer 的输出,然后在末尾附加您需要的内容。
由于您的 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 个元素执行此操作,但逻辑保持不变。
我的开始日期为“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时间戳。 有人可以帮我解决这个问题吗?
我不知道这是否是您要找的,但它似乎有效
seq.POSIXt(as.POSIXct(start), as.POSIXct(end), units = "seconds", by = .5)
当您使用函数 as.integer 时,它会去掉数字的小数部分,在您的例子中,就是毫秒。
我建议您使用此解决方法来获取所需的 UNIX 格式数字。 为了获得所需的输出,您可以获取函数 as.integer 的输出,然后在末尾附加您需要的内容。 由于您的 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 个元素执行此操作,但逻辑保持不变。