按组计算时间差

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


你能先告诉我们你在这里尝试计算什么吗? - Tim Biegeleisen
这是问题所在:假设您正在尝试计算每个目标/源组的潜在客户,MySQL不支持分析函数。因此,您可能需要采用不同的方法。 - Tim Biegeleisen
我试图计算从源到目标的访问时间差。所以这在MySQL中是不可能的 :-/ - Daniel
1个回答

4

假设您想在 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年。


1
谢谢伙计,我在我的数据集上尝试了它,它百分之百有效。非常感谢!我得学习更多关于这个包(dplyr)的知识! :) - Daniel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接