【问题标题】:Insert colons into time stamp hhmmss将冒号插入时间戳 hhmmss
【发布时间】:2015-01-06 14:04:24
【问题描述】:

我是 stackoverflow 和 R 编程的新手。

假设我有以下数据:

time<-as.factor(c(142250,101449,85829))
as.data.frame(time)

这将返回以下内容:

    time
  1 142250
  2 101449
  3  85829

我想要的是将上述内容转换为带有分号的时间戳,例如:

142250 将是 14:22:50

我能够使用 chron 包找到以下代码:

library('chron')
times(gsub("(..)(..)(..)", "\\1:\\2:\\3", date))

返回

[1] 14:22:50 10:14:49 **<NA>**  

如您所见,问题是如果少于 6 个字符,它将返回 NA。

我所追求的输出是返回以下结果:

[1] 14:22:50 10:14:49 8:58:29  

我相信我可能需要做一些循环,但我不知道该怎么做?

任何帮助将不胜感激。

【问题讨论】:

  • 所以,11111 保证是 01:11:11 而不是 11:01:1111:11:01?
  • 是的,没错!感谢您指出这一点

标签: r time-format


【解决方案1】:

我很想避免使用正则表达式,而只使用substring.

time <- sprintf("%06d", as.numeric(as.character(time)))
paste(
  substring(time, 1, 2), 
  substring(time, 3, 4), 
  substring(time, 5, 6), 
  sep = ":"
)

【讨论】:

    【解决方案2】:

    因此,为了达到您想要的输出,您可以使用 sprintf 并添加前导 0 以防字符串短于 6,但请参阅 @Rolands 评论并提供更清晰的说明

    library('chron')
    time <- sprintf("%06d", as.numeric(as.character(time)))
    times(gsub("(..)(..)(..)", "\\1:\\2:\\3", time))
    ## [1] 14:22:50 10:14:49 08:58:29
    

    【讨论】:

    • 嗨,大卫,效果很好!谢谢!我不知道'sprintf'功能:)
    猜你喜欢
    • 1970-01-01
    • 2011-06-02
    • 1970-01-01
    • 2017-03-06
    • 1970-01-01
    • 2012-09-11
    • 2016-08-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多