我是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
我相信我可能需要做一些循环,但我不知道该怎么做呢?
非常感谢任何帮助。
答案 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 = ":"
)