私は大量のデータセットを持っており、個体と日付の一意のIDを持ち、各個人は複数の出会いがあります。以下R:ヒストリを日付別に集計する
あるコードと、このデータがどのように見えるかの例:
strDates <- c("09/09/16", "6/7/16", "5/6/16", "2/3/16", "2/1/16", "11/8/16",
"6/8/16", "5/8/16","2/3/16","1/1/16")
Date<-as.Date(strDates, "%m/%d/%y")
ID <- c("A", "A", "A", "A","A","B","B","B","B","B")
Event <- c(1,0,1,0,1,0,1,1,1,0)
sample_df <- data.frame(Date,ID,Event)
sample_df
Date ID Event
1 2016-09-09 A 1
2 2016-06-07 A 0
3 2016-05-06 A 1
4 2016-02-03 A 0
5 2016-02-01 A 1
6 2016-11-08 B 0
7 2016-06-08 B 1
8 2016-05-08 B 1
9 2016-02-03 B 1
10 2016-01-01 B 0
私は出会いあたり取り付けられているすべての情報を維持したいが、その後IDで次の履歴情報を集約
- 前回の出会いの回数
- 前回のイベントの回数
例として、行2を見てみましょう。
行2はID Aなので、Row 2 Encounterの前に発生した行3-5を参照します。この行グループ内で、行3 & 5に両方ともイベントがあることがわかります。行2 = 2
のための過去のイベントの行2 = 3
数の前の出会いの
ナンバー理想的には、私は次のような出力になるだろう。これまでのところ
Date ID Event PrevEnc PrevEvent
1 2016-09-09 A 1 4 2
2 2016-06-07 A 0 3 2
3 2016-05-06 A 1 2 1
4 2016-02-03 A 0 1 1
5 2016-02-01 A 1 0 0
6 2016-11-08 B 0 4 3
7 2016-06-08 B 1 3 2
8 2016-05-08 B 1 2 1
9 2016-02-03 B 1 1 0
10 2016-01-01 B 0 0 0
を、I dplyrでこの問題をmutateとsummaryだけでなく、特定のIDに対して以前に発生したイベントに集約させることはできませんでした。 If-thenステートメントを使っていくつかの面倒なForループを試しましたが、このプロセスを単純化するためのパッケージや技術が存在するかどうかは疑問です。
ありがとうございました!
'0:(n()-1)'は 'row_number() - 1L'ですか?また、元のインデックスは 'row_number()'になると思います。 – Frank
うん、@フランク - それらは同等でなければなりません。なぜ私は 'row_number()'をより頻繁に使用し始めていないのか分かりません。おそらく、前置きのアプローチからの怠惰なホールドオーバー。 –
非常に参考になりました。ラグはdefです。私が知りませんでしたし、今それを持って満足して何か! – EntryLevelR