2016-11-05 77 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中的東西,你需要一個分組函數。隨着例如group_bydplyr你可以這樣做:

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

感謝哥們,我試着在我的數據集,它工作100%。非常感謝你!我必須更多地瞭解這個軟件包(dplyr)! :) – Daniel