2016-09-06 8 views
0

イベントのすべての発生を特定し、最初の発生を順番に繰り返す場合、タグ付けしてカウントを追加できますが、イベントが変更された後はカウントをリセットできません。data.tableを使用して、すべてのイベント発生を特定する条件を指定して、最初に発生したイベントを特定します。

私のデータは〜30個の奇数IDを持つ〜1M行です。私は1つのIDだけを追加しましたが、私のデータには30の奇妙なIDがあります。テーブルにはID、日時、ステータスがあります。

Occurrence_B - - のための旗

状況は、私は3つの列を追加したい私に関するイベントがB.

です...複数の値-A、B、Cを持つことができるイベントですイベントは、B

COUNT_Bある - その特定の発生が最初に又は継続発生

である場合を示すためにフラグ - イベントが

Include_Bを変更したときにリセットしてB =イベントの連続発生をカウント

私は、シーケンスの最初のオカレンスを選択するために、Include_B = 'new'のデータをサブセット化します。

ID Date Status Occurrence_B Count_B Include_B 

A 7/28/15 12:00 AM A 0 0 0 

A 7/28/15 12:30 AM A 0 0 0 

A 7/30/15 12:00 AM B 1 1 new 

A 7/31/15 12:00 AM B 1 2 continued 

A 7/31/15 11:00 AM B 1 3 continued 

A 8/2/15 10:00 AM   B 0 0 0 

A 8/3/15 12:00 AM   C 0 0 0 

A 8/4/15 12:00 AM   B 1 1 new 

A 8/5/15 12:00 AM   B 1 2 continued 

A 8/6/15 12:00 AM   A 1 0 continued 

A 8/7/15 12:00 AM   B 1 1 new 

table_picture

マイサンプル

d1[, Occurrence_B:=Status %in% c('B')+0L] 

d1[, Count_B := cumsum(Occurrence_B), by=.(ID,Status)] 

問題は、私はイベントの変更後COUNT_Bをリセットする方法がわからないですcode--。私は調査しようとしていますが、私はdata.tableを初めて利用しているので、どんな助けでも大いに感謝します。

質問がある場合はお知らせください。

SK

答えて

2

あなたはこのような何かしてみてください可能性があります

# create Occurrence_B column and initialize Include_B as NA 
(d1[, `:=` (Occurrence_B = as.integer(Status == "B"), Include_B = NA_character_)] 

    # calculate Count_B use rleid(Occurrence_B) as group variable which will group consecutive 
    # same values together 
    [, Count_B := cumsum(Occurrence_B), by = rleid(Occurrence_B)] 

    # Update the Include_B variable in place based on Count_B, when Count_B == 1, it appears 
    # the first time, when Count_B > 1, it is continued, otherwise keep them as NA 
    [Count_B == 1, Include_B := "new"][Count_B > 1, Include_B := "continued"][]) 

# ID    Date Status Occurrence_B Count_B Include_B 
# 1: A 7/28/15 12:00 AM  A   0  0  NA 
# 2: A 7/28/15 12:30 AM  A   0  0  NA 
# 3: A 7/30/15 12:00 AM  B   1  1  new 
# 4: A 7/31/15 12:00 AM  B   1  2 continued 
# 5: A 7/31/15 11:00 AM  B   1  3 continued 
# 6: A 8/2/15 10:00 AM  B   1  4 continued 
# 7: A 8/3/15 12:00 AM  C   0  0  NA 
# 8: A 8/4/15 12:00 AM  B   1  1  new 
# 9: A 8/5/15 12:00 AM  B   1  2 continued 
#10: A 8/6/15 12:00 AM  A   0  0  NA 
#11: A 8/7/15 12:00 AM  B   1  1  new 
+2

をも[* Occurrence_B、ROWID(rleid(Occurrence_B))] 'DTようCOUNT_Bを得ることができます' – Frank

+0

ありがとうございました。できます:)。私はrleidが何をしているかを確認する必要があります。また、データテーブルへの単一の参照で文を結合する方法の1つを学びました。私がしなければならないもう一つのことは、include_B列の各 "New"値の前後3日前と3日後にウィンドウの時間内にあるすべてのレコードにタグを付ける列を追加することです。 – Saikar

関連する問題