按组计算时差

时间:2016-11-05 16:28:53

标签: mysql sql r analytics

我有一个关于计算不同来源和目标的时差的问题。

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)是否可以修复此问题以查询和将数据分组在一起。查询也应该实现该方法,但我认为这是不可能的。如果你有任何解决方案,那就太好了。

1 个答案:

答案 0 :(得分:4)

假设你想在R中做东西,你需要一个分组功能。例如,来自group_by的{​​{1}}可以执行此操作:

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 值远大于您在预期输出中所述的值。这是丰富的,因为第一个时间戳的日期是从2012年开始,而其他时间戳是从2014年开始。