我有一个项目数据框,其中包含在不同时间发生的一定数量的不同事件。例如,说我在各种足球比赛中有过几次事件(进球、角球、红牌等)。我想计算每场比赛中每支球队在特定时间之前发生的每个事件的数量(每场比赛的时间不同)。
所以我可以有一个事件数据框(其中 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 来遍历和子集我之后的数据并计算行数来做到这一点,但是我有 1000 行,这需要很多时间。
有谁知道这样做的最快方法?
编辑:我没有提到任何 game_id 都可能在 eventTime 数据帧中以不同的时间出现多次。例如,game_id 可能出现两次,时间分别为 45 和 70,我想为每个独特的事件/时间组合获得适当的计数。