Я попытался осмотреться, но не нашел похожего вопроса. Любая помощь, указывающая в правильном направлении, приветствуется. Я работаю с данными зарядки электромобилей. Ниже приведен воспроизводимый пример. Отметки времени указывают, когда соответствующее зарядное устройство занято водителем.
charger_id <- c(1, 1, 2, 3, 4, 4)
start_time <- as_datetime(c("2019-06-13 10:56:36", "2019-06-13 15:56:36", "2019-06-13 17:55:56", "2019-06-13 08:55:27", "2019-06-13 04:25:56", "2019-06-13 12:45:47"))
end_time <- as_datetime(c("2019-06-13 14:08:10", "2019-06-14 10:15:46", "2019-06-13 23:20:31", "2019-06-13 17:50:51", "2019-06-13 09:20:16", "2019-06-13 19:20:06"))
df <- data.frame("charger_id" = charger_id, "start_time" = start_time, "end_time" = end_time)
Вот как мои данные структурированы в настоящее время:
charger_id | start_time | end_time |
1 | 2019-06-13 10:56:36 | 2019-06-13 14:08:10 |
1 | 2019-06-13 15:16:26 | 2019-06-14 10:15:46 |
2 | 2019-06-13 17:55:56 | 2019-06-13 24:20:31 |
3 | 2019-06-13 08:55:27 | 2019-06-13 17:50:51 |
4 | 2019-06-13 04:25:56 | 2019-06-13 09:20:16 |
4 | 2019-06-13 12:45:47 | 2019-06-13 19:20:06 |
И я хочу рассчитать для каждого сеанса почасовое использование. Столбец time_occupied
указывает прошедшее время (в минутах), которое определенное зарядное устройство для определенного сеанса занимало каждый час.
Например, в отношении charger_id = 1
его первый сеанс проходил с 10:56:36 до 14:08:10, так что это 192 минуты, распределенные на 5 часов. Результирующая таблица для этого сеанса должна выглядеть примерно так:
charger_id | hour | time_occupied |
... | ... | ... |
1 | 2019-06-13 08:00:00 | 0 |
1 | 2019-06-13 09:00:00 | 0 |
1 | 2019-06-13 10:00:00 | 4 |
1 | 2019-06-13 11:00:00 | 60 |
1 | 2019-06-13 12:00:00 | 60 |
1 | 2019-06-13 13:00:00 | 60 |
1 | 2019-06-13 14:00:00 | 8 |
1 | 2019-06-13 15:00:00 | 0 |
... | ... | ... |
Эта таблица является небольшим снимком очень длинного финального стола, который я ищу. Для каждого charger_id
и дня, за который я собрал данные, будут 24-часовые отметки времени (например, 2019-06-13 15:00:00
) и столбец time_occupied
, указывающий часовую занятость сеанса.
Для получения дополнительной информации,эта ссылка описывает ту же цель, к которой я стремлюсь, но запрашивала SQL: https://community.oracle.com/message/13318002#13318002