У меня есть дата-кадр с рабочим временем каждого дня недели. У меня есть время начала и окончания каждого дня. Проблема возникает, когда работник дважды работал в один и тот же день. Например, он начал работать в пятницу в 22:00 и закончил в субботу в 8:00, но снова начал работать в 22:00 в субботу вечером. Мой набор данных теперь структурирован так:
dput(droplevels(head(data1, 10)))
structure(list(Mon.Start1 = structure(c(2L, 1L, 1L, 4L, 1L, 3L,
2L, 4L, 1L, 1L), .Label = c(" ", "14:30:00", "22:30:00", "7:00:00"
), class = "factor"), Mon.End1 = structure(c(4L, 1L, 1L, 2L,
1L, 6L, 5L, 3L, 1L, 1L), .Label = c(" ", "16:00:00", "17:30:00",
"23:15:00", "23:30:00", "24:00:00"), class = "factor"), Mon.Start2 = structure(c(1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = " ", class = "factor"),
Mon.End2 = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L), .Label = " ", class = "factor"), Tue.Start1 = structure(c(4L,
1L, 3L, 5L, 1L, 2L, 1L, 5L, 5L, 1L), .Label = c(" ", "0:00:00",
"14:00:00", "14:30:00", "7:00:00"), class = "factor"), Tue.End1 = structure(c(3L,
1L, 4L, 2L, 1L, 5L, 1L, 2L, 2L, 1L), .Label = c(" ", "16:30:00",
"23:15:00", "24:00:00", "8:00:00"), class = "factor"), Tue.Start2 = structure(c(1L,
1L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 1L), .Label = c(" ", "22:30:00"
), class = "factor"), Tue.End2 = structure(c(1L, 1L, 1L,
1L, 1L, 2L, 1L, 1L, 1L, 1L), .Label = c(" ", "24:00:00"), class = "factor"),
Wed.Start1 = structure(c(1L, 3L, 1L, 3L, 1L, 2L, 1L, 3L,
3L, 1L), .Label = c(" ", "0:00:00", "7:00:00"), class = "factor"),
Wed.End1 = structure(c(1L, 3L, 1L, 3L, 1L, 5L, 1L, 4L, 2L,
1L), .Label = c(" ", "16:30:00", "17:00:00", "17:30:00",
"8:00:00"), class = "factor"), Wed.Start2 = structure(c(1L,
1L, 1L, 1L, 1L, 2L, 1L, 1L, 1L, 1L), .Label = c(" ", "22:30:00"
), class = "factor"), Wed.End2 = structure(c(1L, 1L, 1L,
1L, 1L, 2L, 1L, 1L, 1L, 1L), .Label = c(" ", "24:00:00"), class = "factor"),
Thu.Start1 = structure(c(1L, 1L, 1L, 4L, 1L, 2L, 3L, 4L,
4L, 1L), .Label = c(" ", "0:00:00", "14:30:00", "7:00:00"
), class = "factor"), Thu.End1 = structure(c(1L, 1L, 1L,
2L, 1L, 4L, 3L, 2L, 2L, 1L), .Label = c(" ", "16:30:00",
"24:00:00", "8:00:00"), class = "factor"), Thu.Start2 = structure(c(1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = " ", class = "factor"),
Thu.End2 = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L), .Label = " ", class = "factor"), Fri.Start1 = structure(c(2L,
1L, 1L, 4L, 3L, 1L, 1L, 4L, 4L, 1L), .Label = c(" ", "6:30:00",
"6:45:00", "7:00:00"), class = "factor"), Fri.End1 = structure(c(5L,
1L, 1L, 3L, 2L, 1L, 1L, 4L, 2L, 1L), .Label = c(" ", "16:30:00",
"16:45:00", "17:30:00", "18:30:00"), class = "factor"), Fri.Start2 = structure(c(1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = " ", class = "factor"),
Fri.End2 = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L), .Label = " ", class = "factor"), Sa.Start1 = structure(c(4L,
5L, 1L, 1L, 3L, 1L, 1L, 5L, 1L, 2L), .Label = c(" ", "14:00:00",
"14:45:00", "6:30:00", "7:00:00"), class = "factor"), Sa.End1 = structure(c(4L,
3L, 1L, 1L, 5L, 1L, 1L, 2L, 1L, 6L), .Label = c(" ", "16:30:00",
"17:00:00", "18:30:00", "23:15:00", "24:00:00"), class = "factor"),
Sa.Start2 = structure(c(1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L,
1L), .Label = " ", class = "factor"), Sa.End2 = structure(c(1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L), .Label = " ", class = "factor"),
Sun.Start1 = structure(c(4L, 1L, 1L, 1L, 3L, 1L, 1L, 1L,
1L, 2L), .Label = c(" ", "0:00:00", "14:45:00", "6:30:00"
), class = "factor"), Sun.End1 = structure(c(3L, 1L, 1L,
1L, 4L, 1L, 1L, 1L, 1L, 2L), .Label = c(" ", "0:30:00", "16:45:00",
"23:15:00"), class = "factor"), Sun.Start2 = structure(c(1L,
1L, 1L, 1L, 1L, 1L, 1L, 1L, 1L, 2L), .Label = c(" ", "14:00:00"
), class = "factor"), Sun.End2 = structure(c(1L, 1L, 1L,
1L, 1L, 1L, 1L, 1L, 1L, 2L), .Label = c(" ", "24:00:00"), class = "factor")), row.names = c("21",
"22", "23", "25", "26", "27", "28", "31", "34", "35"), class = "data.frame")
Я попытался установить время начала и окончания с помощью lubridate пакета. Я также добавил даты в все дни (как .POSICxt) Когда сотрудник работает только один раз в день, он работает, но не тогда, когда он работал дважды. Поскольку иногда мое Конечное время действительно является Конечным временем (поскольку для понедельника 24:00 является конечным временем), но иногда оно продолжается в течение ночи (как пятница и суббота), и поэтому 24:00 не является конечным временем. Есть ли функция, чтобы установить, что каждый раз, когда время запуска равно 00, время начала должно быть start2 с предыдущего дня? Или как я мог решить эту проблему? Цель состоит в том, чтобы создавать перерывы и обозначать каждую смену по времени начала, как ночь, поздняя смена и c, а также время перехода. Также для тех, кто работал дважды, если я сократил и обозначил начальные часы, чтобы определить смену, поскольку у сотрудников есть два начальных часа, я заканчиваю еще одну смену в неделю, что на самом деле не правильно.
Желаемый вывод будет иметь день недели в одном столбце, время начала, время окончания, продолжительность смены, тип смены (выкл., Утреннее, позднее, ночное время), а затем после того, как будет иметь это для каждого дня быть в состоянии сделать некоторые вычисления на недельном уровне и далее на месячном уровне.
Если бы кто-нибудь мог дать мне несколько советов, я был бы очень благодарен. Спасибо