私はthis questionと尋ねていましたが、イベントの前に負の数を生成するのに最適な以下の解決策を得ました。別のイベントの後で新しい列に数値を生成
library(data.table)
setDT(df1)[, event_lead:=-(.N:1) ,cumsum(event == 1)
][, event_lead := event_lead* (!event)]
df1
# var1 var2 event event_lead
# 1: 0.658 72.193 0 -5
# 2: 0.641 70.217 0 -4
# 3: 0.641 40.173 0 -3
# 4: 0.652 52.687 0 -2
# 5: 0.531 50.652 0 -1
# 6: 0.529 39.497 1 0
# 7: 0.651 29.291 0 -4
# 8: 0.634 59.548 0 -3
# 9: 0.711 51.925 0 -2
#10: 0.635 75.772 0 -1
#11: 0.710 53.378 1 0
#12: 0.660 87.744 0 -3
#13: 0.540 62.547 0 -2
#14: 0.618 38.050 0 -1
#15: 0.602 60.978 1 0
このコードを調整して、イベント後に別の列の正の数値を取得しようとしています。
> setDT(df1)[, event_lead:=-(.N:1) ,cumsum(event == 1)
+ ][, event_lead := event_lead* (!event)]
> setDT(df1)[, event_follow:=+(1:.N) ,cumsum(event == 1)
+ ][, event_follow := event_follow* (!event)]
> df1
var1 var2 event event_lead event_follow
1: 0.658 72.193 0 -5 1
2: 0.641 70.217 0 -4 2
3: 0.641 40.173 0 -3 3
4: 0.652 52.687 0 -2 4
5: 0.531 50.652 0 -1 5
6: 0.529 39.497 1 0 0
7: 0.651 29.291 0 -4 2
8: 0.634 59.548 0 -3 3
9: 0.711 51.925 0 -2 4
10: 0.635 75.772 0 -1 5
11: 0.710 53.378 1 0 0
12: 0.660 87.744 0 -3 2
13: 0.540 62.547 0 -2 3
14: 0.618 38.050 0 -1 4
15: 0.602 60.978 1 0 0
なぜそれがevent_follow
で0
後の1をスキップしないし、私はそれをどのように修正することができますか?
入力データセットはどれですか – akrun
入力は[この最初の質問]と同じです(http://stackoverflow.com/questions/38387475/generate-numbers-before-an-event) – pyne
ありがとうございます、それは 'event_follow'またはあなたが得たものコードと変更したい。それが後者の場合は、予期していることを示すことが良いです – akrun