私は連続した観測のランを特定し、それらをグループ化して再構成して、各ランの開始と終了が列を占めるようにしようとしています。視覚的に次のようにグループと形による連続したオブセッションの実行
## REPRODUCIBLE EXAMPLE
> dput(example)
structure(list(id = c(123, 123, 123, 123, 123, 123, 123, 123,
234, 234, 234), date = structure(c(1398816000, 1398902400, 1398988800,
1399075200, 1399161600, 1350777600, 1350864000, 1350950400, 1470009600,
1470096000, 1470182400), class = c("POSIXct", "POSIXt"), tzone = "UTC"),
event = structure(c(1L, 2L, 2L, 2L, 1L, 1L, 2L, 1L, 1L, 2L,
1L), .Label = c("0", "1"), class = "factor")), row.names = c(NA,
-11L), .Names = c("id", "date", "event"), class = c("tbl_df",
"tbl", "data.frame"))
## GLIMPSE DATA
> dplyr::glimpse(example)
Observations: 11
Variables: 3
$ id <dbl> 123, 123, 123, 123, 123, 123, 123, 123, 234, 234, 234
$ date <dttm> 2014-04-30, 2014-05-01, 2014-05-02, 2014-05-03, 2014-05-04, 2012-10-21, 2012-10-22, 2012-10-23, 2016-08-01, 2016-08-02, 2016-08-03
$ event <fctr> 0, 1, 1, 1, 0, 0, 1, 0, 0, 1, 0
私はアプローチを分解しました:id
内の連続観測 のランを識別するためのid
rle
によって
- グループのデータは(例えば
rle(example$event > 0)
) - res (実行中の)min(日付)とmax(日付)が列になるような、長いから長い間の変化を示します。
私はどのように進むべきかわかりません。 similar questionへのdata.table
の解決策は近いですが、私はそれを再利用することができませんでした。 other postからアイデアを盗む
グループIDによっては、ソート日付で、event.start分間の日付を取得するには、イベントの最大の日付を取得します。やめる。 – zx8754
ああ、1人のIDに1つ以上の開始終了イベントがあるということですか? – zx8754
@ zx8754 **はい**:IDごとに複数の実行があるため、開始日と終了日が複数になります。私の最小限の例はそれを捕らえなかった。 –