r - 将表示天数的时间小数/分数转换为 R 中的实际时间?

标签 r time-format datetime-conversion

我的数据集上有一个 R 列,其中的值已转换为我认为基于的时间小数分数。我一直使用这个网站作为引用:http://www.calculatorsoup.com/calculators/time/decimal-to-time-calculator.php

通过执行以下操作,转换 0.3408565 对应于 8:10:50 的时间:

0.3408565 * 24 hours/day = 8.180555544 = 8 hours

0.180555544 * 60 minutes = 10.83333264 = 10 minutes

0.83333264 * 60 seconds = 49.9999584 = 50 seconds

正如您所看到的,它正在提取余数并进行进一步的乘法,但是我不确定如何在 R 中实现该过程。我想使用它转换我的列中的所有值,以便我可以替换 0.3408565, 0.3864468、0.4400231 等,分别对应实际时间 8:10:50、09:16:29、10:33:38。 Excel 中似乎也是这样做的。

我尝试编写自己的函数,用英语可以实现:

convertTime <- function(x)
{
x * 60 = Hour
x2 * 24 = Min
x3 * 24 = Sec

hourChar <- as.character(Hour)
minChar <- as.character(Min)
secChar <- as.character(Sec)
paste(hourChar, minChar, secChar, sep=":")
}

x 为 0.3408565,但这当然不会提取余数。我可能让它变得非常复杂,但我想使用每个值作为要转换的输入来循环遍历列中的所有值。

最后,我查看了“lubridate”等软件包,但找不到与我的问题相关的任何内容。

我还在这里浏览了我的具体情况,但找不到任何与我的问题真正相关的内容。有什么软件包或解决方案可以帮助我吗?

编辑:我想说这两个答案对于其他遇到此类问题的人来说都非常有效,谢谢你们!

最佳答案

尝试使用 chron 中的 times 来表示一天中的时间:

library(chron)
format(times(0.3408565))
## [1] "08:10:50"

如果您有类似 x = 3.3408565 天的内容,则可以将其格式化为:

x <- 3.3408565
paste(x %/% 1, times(x %% 1))
## [1] "3 08:10:50"

关于问题的主题,尚不清楚“R 中的实际时间”意味着什么,但时间间隔可以表示为 “difftime” 对象,因此如果您想转换 x "difftime" 类 R 对象,然后:

as.difftime(x, units = "days")
## Time difference of 3.340857 days

或者如果您想从当前日期/时间中减去x:

Sys.time() - as.difftime(x, units = "days")
## [1] "2017-01-27 05:00:22 EST"

R News 4/1 的 R Help Desk 列中还有一些可能相关的信息,包括有关在 R 中转换 Excel 日期/时间的信息 -- https://www.r-project.org/doc/Rnews/Rnews_2004-1.pdf

关于r - 将表示天数的时间小数/分数转换为 R 中的实际时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41941523/

相关文章:

c# - unity c# 将日期字符串转换为所需日期时间格式的日期时间对象

PHP - 无法将正确的 DateTimeZone 设置为 DateTime

r - 与唯一的 observeEvent 相关联的 actionButton 的动态数量

r - complete.cases() 和 na.omit() 之间的差异

r - 使用 while 循环而不打印所有迭代

javascript - 尝试使用 d3.time.format 格式化日期时出现 JavaScript 错误 "d.getMonth is not a function"

sql-server - SSIS 数据错误地进入 excel 目的地

android - 无法从本地日期转换为伦敦日期对象

r - 在 Axis 标签周围添加圆圈

javascript - 如何使用 Javascript 将 ISO 8601 日期格式化为更易读的格式?