代码之家  ›  专栏  ›  技术社区  ›  Nilakshi Naphade

在R中沿毫秒创建一系列时间戳

  •  0
  • Nilakshi Naphade  · 技术社区  · 6 年前

    我的开始日期是“2017-11-14 10:11:01 CET”,结束日期是“2017-11-15 01:15:59 CET”。我想在这些开始和结束时间戳之间创建每个500毫秒的时间戳。E、 g.我需要一个包含以下输出的数据帧

    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 . 现在我想使用sequence函数来创建时间戳序列,每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 回复  |  直到 6 年前
        1
  •  1
  •   Marco De Virgilis    6 年前

    我不知道这是不是你要找的,但似乎很管用

    seq.POSIXt(as.POSIXct(start), as.POSIXct(end), units = "seconds", by = .5)
    
        2
  •  0
  •   Marco De Virgilis    6 年前

    当您使用函数as.integer时,它将去掉数字的小数部分(在您的例子中是毫秒)。

    我建议您使用此解决方案以获得UNIX格式所需的数字。 为了获得所需的输出,可以将函数的输出作为.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个元素执行此操作,但逻辑保持不变。