формат - отображать дробные данные времени как чч:мм:сс R

У меня есть данные ниже для рабочих часов, которые мне нужно сравнить - начать и закончить с датой и временем. Сначала я извлекаю временную часть каждого из них как начальную и конечную переменные, а затем использую пакет 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, временем окончания IE в строке 1 и временем начала в строке 2, чтобы увидеть разрыв между ними.

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

Когда я это делаю, переменная форматируется как десятичная. Я не могу на всю жизнь заставить его отображаться как чч: мм: сс. Я попытался указать out.format как чч: мм: сс в хрон, изменить time_in / time_out на числовое и символьное до и после извлечения и применить хрон (время), изменить формат переменной diff_ после и т. д.

Казалось бы, очень простой вопрос -

Как получить переменную сравнения результатов (diff_outX0_inX1) для отображения времени в формате чч:мм или чч:мм:сс ?? Я знаю формулу для преобразования дробных дней в минуты в Excel, но я бы предпочел не записывать двухэтапную функцию, я предполагаю, что это простая проблема форматирования.

Любая помощь приветствуется.

РЕДАКТИРОВАТЬ - помечен как дубликат... ОК. Я спросил, есть ли способ сделать это без написания функции. Ответ, который был связан, включает функцию. Первый комментарий дал чистый простой ответ. Я могу воспроизвести ответ в комментарии, я не смог воспроизвести функцию сам, не так полезно. Я также добавил другое решение, которое не требует dplyr. Нигде, где я смотрел онлайн, мне не показывали что-то столь же простое, как «просто отформатируйте результат с помощью хрона».


person Adam_S    schedule 20.11.2018    source источник
comment
Просто верните его обратно, добавив %>% ungroup %>% mutate(diff_outX0_inX1 = times(diff_outX0_inX1))   -  person G. Grothendieck    schedule 20.11.2018
comment
Ответ Гротендика работал отлично (спасибо!), или можно было использовать что-то вроде eg_data3$diff_outX0_inX1 ‹- times(eg_data3$diff_outX0_inX1)   -  person Adam_S    schedule 20.11.2018
comment
Я повторно открыл это, потому что предполагаемый дубликат касается POSIXct, тогда как этот вопрос касается времени хрона.   -  person G. Grothendieck    schedule 20.11.2018