按组计算时间差

Calculating time difference by groups

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

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

假设你想在 R 中做一些事情,你需要一个分组函数。例如 dplyr 中的 group_by 你可以这样做:

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 年。