将冒号插入时间戳hhmmss

时间:2014-11-10 09:52:03

标签: r time-format

我是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  

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

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

因此,为了达到您想要的输出,您可以使用sprintf并在字符串短于6的情况下添加前导0,但请参阅@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

答案 1 :(得分:1)

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

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