を注文し、グループ化に基づいて私はこのデータフレームを有する
dat = data.frame(ID= c(1,1,1,2,3,3),
NumberInSequence= c(1,2,3,1,1,2),
StartTime = as.POSIXct(c("2016-01-01 05:52:05 GMT","2016-01-01 05:52:11 GMT","2016-01-01 05:52:16 GMT","2016-01-01 05:40:05 GMT","2016-01-01 06:12:13 GMT","2016-01-01 07:12:26 GMT")) ,
EndTime = as.POSIXct(c("2016-01-01 05:52:10 GMT","2016-01-01 05:52:16 GMT","2016-01-01 05:52:30 GMT","2016-01-01 05:46:05 GMT","2016-01-01 06:12:25 GMT","2016-01-01 08:00:00 GMT") )
)
dat
ID NumberInSequence StartTime EndTime
1 1 1 2016-01-01 05:52:05 2016-01-01 05:52:10
2 1 2 2016-01-01 05:52:11 2016-01-01 05:52:16
3 1 3 2016-01-01 05:52:16 2016-01-01 05:52:30
4 2 1 2016-01-01 05:40:05 2016-01-01 05:46:05
5 3 1 2016-01-01 06:12:13 2016-01-01 06:12:25
6 3 2 2016-01-01 07:12:26 2016-01-01 08:00:00
の列を追加する各IDは、1つの又は複数の行を有することができ、各列は、すべてのIDのために時間順です。
1列目:同じIDの次の開始時刻までのIDのEndTimeの間の時間の長さ(秒単位)を示す「Duration」。
第2列:同じIDの実際の次の開始時刻である「次の開始時刻」。
結果は次のようになります。
dat $ Duration =?
dat $ NextStartTime =? ID = 3 = 1回の終了時間はとても時間が61であり、次の開始時刻は、ID = 3から午前7時12分26秒であり、シーケンス内の数61秒後である配列内の番号については、例えば
ID NumberInSequence StartTime EndTime Duration NextStartTime
1 1 1 2016-01-01 05:52:05 2016-01-01 05:52:10 1 2016-01-01 05:52:11
2 1 2 2016-01-01 05:52:11 2016-01-01 05:52:16 0 2016-01-01 05:52:16
3 1 3 2016-01-01 05:52:16 2016-01-01 05:52:30 NA NA
4 2 1 2016-01-01 05:40:05 2016-01-01 05:46:05 NA NA
5 3 1 2016-01-01 06:12:13 2016-01-01 06:12:25 3601 2016-01-01 07:12:26
6 3 2 2016-01-01 07:12:26 2016-01-01 08:00:00 NA NA
= NAは、シーケンス= 1
にID = 2と番号のように表示されます。何の次回の開始時間がありませんがあり、私は何とかdplyrでこれをやって見ていた行2.
....
########更新番号l ead()は答えですが、小さな問題があります。あなたが負の遅れと時系列にstats::lag
のようなものですdplyr::lead
を、使用することができ、(arrange(ID, NumberInSequence)
わからない場合に使用します)ために、限り、あなたのデータがあるとして、このポストにNextStartTime
については
using dplyr lead but with some contraints
'DAT%>%GROUP_BY(ID)%>%変異(NextStartTime =鉛(のStartTime)、持続時間= difftime(NextStartTime、終了時間、単位= 'S'))'多分 – alistaire
ありがとうございますあなたはここを見てみることができますhttp://stackoverflow.com/questions/39714029/using-dplyr-lead-but-with-some-contraints – user3022875