2016-11-05 13 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で物事をしたいとしたら、グループ化機能が必要です。

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

結果:最初のtdiff値はあなたが意図した出力に記載されたものよりもはるかに大きいことを

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 

は注意dplyrから例group_by用を使用すると、それを行うことができます。これはリッチで、最初のタイムスタンプの日付は2012年のもので、他のタイムスタンプは2014年のものです。

+1

ありがとうございました。私は自分のデータセットで試してみましたが、100%動作します。どうもありがとうございました!私はパッケージ(dplyr)についてもっと知る必要があります! :) – Daniel