Как распределить несколько значений временного интервала за 1 минуту базы в R? - PullRequest
0 голосов
/ 02 мая 2020

У меня есть данные сотен тысяч автомобилей, которые выглядят следующим образом:

df <- data.frame( 'ID' = c('1','1','1','2','2','2'), 'start' = c('06:00', '08:00', '12:15', '06:00','12:30', '18:00'), 'end' = c('07:00', '08:30', '12:45', '06:45', '13:00', '18:45'), 'value' = c('35', '34', '30', '45', '50', '32')

Теперь я хочу преобразовать эти values в базисную переменную за 1 минуту. Таким образом, преобразованный кадр данных будет состоять только из столбца минутного базового времени (от 1 до 1440 или с 00:00 до 23:59) и общего базового трафика минут c идентификаторов, который представляет собой значение, деленное на разницу во времени (value/(end-start)) и нанесите его на график. Ниже я приложил файл Excel в качестве примера: Пример Excel . Любая помощь будет оценена!

1 Ответ

1 голос
/ 02 мая 2020

Сложная часть заключалась в том, чтобы преобразовать строки символов в реальное время. Это работает для вас?

library(tidyverse)
df <- tibble(
  'ID' = c('1','1','1','2','2','2'), 
  'start' = c('06:00', '08:00', '12:15', '06:00','12:30', '18:00'), 
  'end' = c('07:00', '08:30', '12:45', '06:45', '13:00', '18:45'), 
  'value' = c('35', '34', '30', '45', '50', '32'))

durFn <- function(stDur){
  st <- str_split(stDur, ":") %>% 
    unlist() %>% 
    as.double()
  dur <- lubridate::duration(hours = st[1], minutes = st[2])
}

df %>% 
  as_tibble() %>% 
  mutate(startD = map(start, durFn),
         endD = map(end, durFn),
         value = as.double(value),
         minutes = map2_dbl(startD, endD, 
                        ~ suppressMessages(as.double(.y - .x) / 60 )),
         minutes = minutes %% 1440,       # Just in case we wrapped around midnight
         basis = value/ minutes) %>% 
  select(- startD, - endD)

Я создал lubridate::duration для вашего начала и конца. Они в секундах. Я взял их разницу и разделил на 60, чтобы получить минуты. Тогда ваша база - это всего лишь значение / минуты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...