2016-04-04 15 views
-1

私はこのようなデータテーブルmyTable(入力)があります。集約(R言語)

user_id timestamp event_id 

1 Ann  11115555 Level1Start 
2 Serg  11113333 Level1Start 
3 Ann  11117777 Level1Complete 
4 Ann  11116666 Level1Complete 
5 Ann  11112222 Level1Start 

を私はtimeInLevelという名前の列を追加し、最初の2つのログLevel1StartとLevel1Complete間の時間を計算する必要があります。

出力:助けを

user_id timestamp event_id   TimeInLevel 

1 Ann  11115555 Level1Start  4444 
2 Serg  11113333 Level1Start  NA 
3 Ann  11117777 Level1Complete 4444 
4 Ann  11116666 Level1Complete 4444 
5 Ann  11112222 Level1Start  4444 

THX !!!

+2

'4444'から来ませんの? – mtoto

+0

@mtotoログ間のタイムスタンプの差は№5№4です(11116666 - 11112222)。タイムスタンプが最小であるため、最初です。 SergにLevel1Completeのログがありません – Smasell

答えて

3

おそらくdata.tableの構文を使用して、このような何か:

dt[, TimeInterval := min(timestamp[event_id == "Level1Complete"]) - 
    min(timestamp[event_id == "Level1Start"]), by = user_id] 
# user_id timestamp  event_id TimeInterval 
#1:  Ann 11115555 Level1Start   4444 
#2: Serg 11113333 Level1Start   NA 
#3:  Ann 11117777 Level1Complete   4444 
#4:  Ann 11116666 Level1Complete   4444 
#5:  Ann 11112222 Level1Start   4444 
+0

このような誤りがあります。「RHSのタイプ( 'double')はLHS( 'integer')と一致する必要があります。チェックしたり強制したりすることは、最速の場合にはあまりにもパフォーマンスに影響を与えます。 (例えば1の代わりに1Lを使って) 'Serge'の' Level1Complete'がないために ' – Smasell

+0

' data.table'が文句を言うが、出力は'> dt'を実行しても正しいです。 – mtoto

+0

申し訳ありませんが動作していません。これは、複数のユーザーしか計算しません。残りは 'TimeInterval'にNAで残っています – Smasell