私は調和しようとしている2つのチブルデータフレームを持っています。最初tibbleは、次のように最初の数行である百万を超える観測を、有する:他のテーブルに基づいて観測データを検索する
data
ID Time(Converted to number)
1 23160
1 23161
1 23162
1 23163
1 23164
1 23165
2 24251
2 24252
次のように第二tibbleルックアップテーブル(すなわち、発生した特定のイベントの情報を持っている)、簡易版である:
lookup_table
ID Event_Time Event_Indicator Number_of_Cumulative_Events
1 23162 1 1
1 23164 1 2
2 24255 1 1
2 24280 0 1
最初のチブルに3番目の列を作成して、その時点の累積イベント数を表示したいとします。上記の例では3番目の列には、したがって、次のようになります。私はので、計算時間のルックアップテーブルにEVENT_TIMEに各観測の時間を比較するための観測数百万人をループすることを避けるためにしようとしています
ID Time(Converted to number) Number
1 23160 0
1 23161 0
1 23162 1
1 23163 1
1 23164 2
1 23165 2
2 24251 0
2 24252 0
。
しかし、ループを使用せずにこれを行う方法についてはわかりません。問題は、すべてのIDが唯一の一度だけlookup_tableに登場した場合lookup_tableが、私は何ができる、いくつかのIDを複数回含まれていることである:私はループの使用を避け、まだ適用できるか
data$Event_Time <- lookup_table[match(data$ID, lookup_table$ID),"Event_Time"]
data$Number <- data %>% mutate(ifelse(Time >= Event_Time,1,0))
任意のアイデア各観測のルックアップ条件は?ありがとうございました。
編集:私はテーブルに参加しようとはしていませんが、lookup_tableとdataテーブルの時間カラムを比較して私の希望のカラムを取得する方法があります。私は非効率的なループ機能を記述した場合の例では、それは次のようになります。
for (i in 1:nrow(data)) {
data$Number[i] <- subset(lookup_table,ID == data$ID[i])[max(which
(data$Time[i] >= lookup_table$Event_Time)), "Number_of_Cumulative_Events"]
}
こんにちは、おかげでたくさんそれは動作します!しかし、もう1つの問題は、データの観測結果の一部が欠落していることです(ID = 3の場合、利用可能な期間データは23550,23551,23552、次に23560にジャンプ)。その場合、期間23553にあるイベントは、累積合計で捕捉されないであろう。私はこれを新しい列に因数分解できる方法はありますか? – NubCookie