2

我有以下需要比较的工作时间数据 - 以日期和时间开始和停止。我首先提取每个的时间部分作为开​​始和停止变量,然后使用 chron 包将它们从因子数据更改为我可以更轻松地比较的东西。

require(chron)
eg_data3 <- data.frame(
id = c('42', '42', '42', '42', '42'),
time_in =  as.factor(c('11/5/2017 13:52', '11/4/2017 14:25', '11/5/2017 15:30', '11/5/2017 17:10', '11/6/2017 18:20')),
time_out = as.factor(c('11/5/2017 13:59', '11/4/2017 14:59', '11/5/2017 16:00', '11/5/2017 17:45', '11/6/2017 18:50')))
eg_data3$start_time <- substring(strptime(eg_data3$time_in, format = "%m/%d/%Y %H:%M"),12,19)
eg_data3$end_time <- substring(strptime(eg_data3$time_out, format = "%m/%d/%Y %H:%M"),12,19)
eg_data3$end_time <- chron(times = eg_data3$end_time)
eg_data3$start_time <- chron(times = eg_data3$start_time)

接下来,我生成另一个变量,比较停止时间 1 和开始时间 2 之间的差异,即第 1 行中的 IE 停止时间与第 2 行中的开始时间,以查看它们之间的差距。

require(dplyr)
eg_data3 <- eg_data3 %>% group_by(id) %>% mutate(diff_outX0_inX1 = start_time - lag(end_time))

当我这样做时,变量被格式化为十进制。我一辈子都无法让它显示为 hh:mm:ss。我尝试在 chron 中将 out.format 指定为 hh:mm:ss,在提取和应用 chron(times) 之前和之后将 time_in / time_out 更改为数字和字符,之后更改 diff_ 变量的格式等。

看起来很简单的问题-

如何让结果比较 (diff_outX0_inX1) 变量显示为时间,hh:mm 或 hh:mm:ss ?我知道在 Excel 中将小数天数转换为分钟数的公式,但我不想写出两步函数,我认为这是一个简单的格式问题。

任何帮助表示赞赏。

编辑 - 被标记为重复...好的。我问是否有不涉及编写函数的方法来做到这一点。链接的答案涉及一个函数。第一条评论提供了一个干净简单的答案。我可以在评论中重现答案,我自己无法重现该功能,几乎没有帮助。我还添加了另一个不需要 dplyr 的解决方案。我在网上查看的任何地方都没有向我展示“只需使用 chron 格式化结果”这样简单的东西。

4

0 回答 0