在R中将数字时间转换为时间格式

17

我从xls文件中读取数据,但是发现时间格式不正确。例如,它可能如下所示:

0.3840277777777778
0.3847222222222222
0.3854166666666667

的确,他们应该是这样的。

09:12
09:13
09:13

我不知道如何将它转换为正确的格式。我查了几个帖子,所有这些帖子都是关于将日期(带/不带时间)转换为正确格式的。

有人能给我任何线索吗?


你使用哪个包/函数从Excel中读取数据?有几种方法。 - RockScience
嗨,我使用了 read.xlsx2(file dir, sheetIndex = 1, header = TRUE, sep = "", stringsAsFactors = FALSE) - Duy Bui
3个回答

20

在将您的数字乘以一天中的秒数(60 * 60 * 24)之后,您可以使用as.POSIXct。

nTime <- c(0.3840277777777778, 0.3847222222222222, 0.3854166666666667)
format(as.POSIXct((nTime) * 86400, origin = "1970-01-01", tz = "UTC"), "%H:%M")
## [1] "09:13" "09:14" "09:15"

这不完全是我想要的,虽然它在某种程度上解决了转换问题。结果现在包含了“1970年01月01日”的日期,而我实际上只想要时间值。 - Duy Bui
你可以使用substring来提取时间。nTime <- 0.5; datePosix <- as.POSIXct((nTime) * 60 * 60 * 24, origin = "1970-01-01", tz = "UTC"); substring(datePosix, 12, 19) - Michele Usuelli

12

另一个选项是使用来自chrontimes

library(chron)
times(nTime)
#[1] 09:13:00 09:14:00 09:15:00

去掉秒数,

substr(times(nTime),1,5)
#[1] "09:13" "09:14" "09:15"

数据

nTime <- c(0.3840277777777778, 0.3847222222222222, 0.3854166666666667)

2

对于想要相反的方法的人:给定 09:13:00,获取 0.3840278。

as.numeric(chron::times("09:13:00"))

基本上,这个想法是一整天等于1,所以中午(12点)就是0.5。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接