2016-11-05 4 views
3

У меня возник вопрос о расчете разницы во времени для разных источников и целей.Расчет разницы во времени по группам

Table1:   

Source  Target  Time     TimeDif(wrong) (right) 
1.2.3.4  2.3.4.5 2012-01-03 21:50:40 3    3 
1.2.3.4  2.3.4.5 2014-01-03 21:50:43 5    5 
1.2.3.4  2.3.4.5 2014-01-03 21:50:48 3    NULL 
2.2.2.2  4.4.4.4 2014-01-03 21:50:51 3    4 
2.2.2.2  4.4.4.4 2014-01-03 21:50:55 4    4 
2.2.2.2  4.4.4.4 2014-01-03 21:50:59 4    NULL 
....  ....  ...... 

Прямо сейчас я рассчитать разницу во времени с:

diffTime <- difftime(time[1:(length(time)-1)] , time[2:length(time)]) * -1 

Проблема в том, что разница во времени путем вычисления этого метода не являются правильными. Это означает, что метод вычисляет весь столбец и не принимает никакого решения между разными источниками и целями. Я не уверен, что эта проблема может быть исправлена ​​пакетом (sqldf) для запроса и группировки данных. Запрос также должен реализовать метод, но я думаю, что это невозможно. Было бы неплохо, если бы у вас были какие-либо решения.

+0

Можете ли вы сначала рассказать нам, что вы пытаетесь вычислить здесь? –

+0

Вот проблема: если вы пытаетесь вычислить лидерство для каждой целевой/исходной группы, MySQL не поддерживает аналитические функции. Таким образом, вы можете сделать лучше с другим подходом. –

+0

Я пытаюсь вычислить разницу во времени доступа от источника к цели. Так что это невозможно с MySQL: -/ – Daniel

ответ

4

Предположим, что вы хотите делать вещи в R, вам нужна функция группировки. С, например group_by от dplyr вы можете сделать это:

library(dplyr) 
dat %>% 
    group_by(Source, Target) %>% 
    mutate(tdif = lead(Time) - Time) 

результат:

Source Target    Time   tdif 
    <fctr> <fctr>    <dttm>  <time> 
1 1.2.3.4 2.3.4.5 2012-01-03 21:50:40 63158403 secs 
2 1.2.3.4 2.3.4.5 2014-01-03 21:50:43  5 secs 
3 1.2.3.4 2.3.4.5 2014-01-03 21:50:48  NA secs 
4 2.2.2.2 4.4.4.4 2014-01-03 21:50:51  4 secs 
5 2.2.2.2 4.4.4.4 2014-01-03 21:50:55  4 secs 
6 2.2.2.2 4.4.4.4 2014-01-03 21:50:59  NA secs 

Обратите внимание, что первое tdiff значение гораздо больше, чем то, что вы заявили в предполагаемом выходе. Это богато и связано с тем, что дата первой отметки времени - с 2012 года, а остальные отметки времени - с 2014 года.

+1

Спасибо, приятель, я попробовал это на своем наборе данных, и он работает на 100%. Большое спасибо! Мне нужно больше узнать о пакете (dplyr)! :) – Daniel