Как извлечь минуты из интервала времени, чтобы вернуть количество минут от каждой даты?Расчет минут в день с учетом времени начала и остановки
У меня есть dataframe с идентификатором корпуса, начинаются & время остановки и общий интервал времени в минутах. Мне нужно выяснить, сколько минут было на каждую дату для каждого случая.
Это похоже на this question, но я не смог перенести этот подход в эту ситуацию.
Исходный набор данных структурирован таким образом, однако окончательное решение необходимо будет масштабировать, чтобы разрешить еще много случаев (см. Альтернативный набор данных ниже).
исходные данные
>so
Case Start Stop Minutes
1 A 2013-01-10 18:00:00 2013-01-10 20:30:00 150 mins
2 B 2013-01-15 22:45:00 2013-01-16 00:15:00 90 mins
3 C 2013-01-20 22:00:00 2013-01-22 02:00:00 1680 mins
4 D 2013-01-27 12:00:00 2013-01-28 06:00:00 1080 mins
5 E 2013-01-01 00:00:00 2013-01-01 02:00:00 120 mins
6 F 2013-01-02 08:00:00 2013-01-03 07:00:00 1380 mins
желаемый выход
Case Date Minutes
1 A 2013-01-10 150
2 B 2013-01-15 75
3 B 2013-01-16 15
4 C 2013-01-20 120
5 C 2013-01-21 1440
6 C 2013-01-22 120
7 D 2013-01-27 720
8 D 2013-01-28 360
9 E 2013-01-01 120
10 F 2013-01-02 960
11 F 2013-01-03 420
DPUT исходных данных
> dput(so)
structure(list(
Case = structure(1:5, .Label = c("A", "B", "C", "D", "E"), class = "factor"),
Start = structure(c(2L, 3L, 4L, 5L, 1L), .Label = c("2013-01-01 00:00:00", "2013-01-10 18:00:00", "2013-01-15 22:45:00", "2013-01-20 22:00:00", "2013-01-27 12:00:00"), class = "factor"),
Stop = structure(c(2L, 3L, 4L, 5L, 1L), .Label = c("2013-01-01 02:00:00", "2013-01-10 20:30:00", "2013-01-16 00:15:00", "2013-01-22 02:00:00", "2013-01-28 06:00:00"), class = "factor"),
Minutes = structure(c(150, 90, 1680, 1080, 120), tzone = "", units = "mins", class = "difftime")
),
.Names = c("Case","Start", "Stop", "Minutes"),
row.names = c(NA, -5L),
class = "data.frame")
DPUT альтернативных больших наборов данных
> dput(so_alt)
structure(list(Case = structure(c(1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 1L, 2L, 3L, 4L, 5L, 6L, 7L, 8L, 1L, 2L), .Label = c("A", "B", "C", "D", "E", "F", "G", "H"), class = "factor"), Start = structure(c(12L, 13L, 4L, 5L, 19L, 20L, 21L, 30L, 22L, 23L, 24L, 25L, 26L, 27L, 28L, 29L, 9L, 6L, 7L, 8L, 3L, 10L, 11L, 14L, 15L, 16L), .Label = c("2012-10-25 18:10:00", "2012-11-01 20:18:00", "2012-11-16 17:45:00", "2012-12-06 01:00:00", "2012-12-06 08:00:00", "2012-12-26 13:15:00", "2012-12-29 19:50:00", "2012-12-30 00:00:00", "2013-01-01 01:46:00", "2013-01-10 20:15:00", "2013-01-11 09:00:00", "2013-01-29 17:00:00", "2013-02-05 21:30:00", "2013-02-21 01:50:00", "2013-02-21 09:25:00", "2013-02-21 12:20:00", "2013-02-22 21:45:00", "2013-02-24 15:30:00", "2013-03-01 10:10:00", "2013-03-06 16:15:00", "2013-03-07 20:00:00", "2013-03-12 21:00:00", "2013-03-13 05:15:00", "2013-03-14 00:45:00", "2013-03-14 11:30:00", "2013-03-15 21:00:00", "2013-03-16 08:15:00", "2013-03-17 06:45:00", "2013-03-18 18:04:00", "2013-03-21 21:40:00"), class = "factor"), Stop = structure(c(12L, 13L, 4L, 5L, 19L, 20L, 21L, 30L, 22L, 23L, 24L, 25L, 26L, 27L, 28L, 29L, 9L, 6L, 7L, 8L, 3L, 10L, 11L, 14L, 15L, 16L), .Label = c("2012-10-25 21:30:00", "2012-11-03 08:00:00", "2012-11-17 08:45:00", "2012-12-06 05:00:00", "2012-12-06 09:30:00", "2012-12-29 19:50:00", "2012-12-30 00:00:00", "2012-12-31 20:00:00", "2013-01-02 06:00:00", "2013-01-10 22:13:00", "2013-01-12 03:30:00", "2013-01-30 07:45:00", "2013-02-06 07:30:00", "2013-02-21 09:25:00", "2013-02-21 12:20:00", "2013-02-22 11:30:00", "2013-02-24 10:15:00", "2013-02-24 16:45:00", "2013-03-06 07:45:00", "2013-03-07 07:30:00", "2013-03-08 08:00:00", "2013-03-13 05:00:00", "2013-03-14 00:45:00", "2013-03-14 10:15:00", "2013-03-14 19:00:00", "2013-03-15 22:36:00", "2013-03-16 19:00:00", "2013-03-18 15:15:00", "2013-03-18 22:00:00", "2013-03-22 08:30:00"), class = "factor"), Minutes = structure(c(885, 600, 240, 90, 7055, 915, 720, 650, 480, 1170, 570, 450, 96, 645, 1950, 236, 1694, 4715, 250, 2640, 900, 118, 1110, 455, 175, 1390), class = "difftime", units = "mins")), .Names = c("Case", "Start", "Stop", "Minutes"), row.names = c(NA, 26L), class = "data.frame")
>
Это прекрасно работает. Однако эта версия не работает, когда в «так» DataFrame имеется более 4 случаев. Можете ли вы, пожалуйста, пересмотреть это значение, чтобы увеличить количество случаев? – Rollie
@ Rollie Обновлено. Теперь это работает. – kohske
Спасибо. Это помогло, но оно по-прежнему не работает для больших наборов данных. Я добавил альтернативный более крупный набор данных для примера. – Rollie