さまざまな時間に発生する特定の数のさまざまなイベントを持つアイテムのデータフレームがあります。たとえば、サッカーのさまざまな試合でイベント (ゴール、コーナー、レッドカードなど) があったとします。各チームの特定の時間前に発生した各イベントの数を、各ゲーム (ゲームごとに時間が異なる場合) でカウントしたいと考えています。
したがって、イベントのデータフレーム (C はコーナー、G はゴール、R はレッドカード) を次のように作成できます。
events <- data.frame(
game_id = c(1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2),
team = c(1, 1, 2, 1, 2, 2, 1, 1, 2, 2, 2, 1, 1),
event_id= c('C', 'C', 'C', 'G', 'C', 'R', 'C', 'C', 'C', 'C', 'G', 'G', 'C'),
time = c(5, 14, 27, 67, 78, 87, 10, 19, 33, 45, 60, 78, 89))
次のように、各イベントを検索する時間の別のデータフレーム:
eventTime <- data.frame(
game_id = c(1, 2),
time = c(45, 65))
したがって、ゲーム 1 では、45 分前に各チームの各イベントの数を数えたいと考えています。ゲーム 2 では、同じことを行いたいのですが、60 分では次のように返します。
game_id time t1_C t1_G t1_R t2_C t2_G t2_R
1 45 2 0 0 1 0 0
2 65 2 0 0 2 1 0
ゲーム 1 では、チーム 1 は 45 分前に 2 つのコーナー、0 ゴール、0 枚のレッドカードを持っていたのに対し、チーム 2 は 1 つのコーナー、0 ゴール、0 枚のレッドカードを持っていました。
apply を使用してデータを調べてサブセット化し、行をカウントアップすることでこれを行ってきましたが、数千の行があり、これには多くの時間がかかります。
これを行う最も簡単な方法を知っている人はいますか?
編集: game_id が eventTime データフレームに異なる時間で複数回表示される可能性があることに言及しませんでした。たとえば、game_id が時間 45 と 70 で 2 回出現する可能性がある場合、それぞれの固有のイベント/時間の組み合わせに対して適切なカウントを取得したいと考えています。