我有一个关于计算不同来源和目标的时差的问题。
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 :(得分: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年开始。