У меня есть данные ниже для рабочих часов, которые мне нужно сравнить - начать и закончить с датой и временем. Сначала я извлекаю временную часть каждого из них как начальную и конечную переменные, а затем использую пакет 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. Нигде, где я смотрел онлайн, мне не показывали что-то столь же простое, как «просто отформатируйте результат с помощью хрона».
%>% ungroup %>% mutate(diff_outX0_inX1 = times(diff_outX0_inX1))
- person G. Grothendieck   schedule 20.11.2018