【发布时间】:2013-10-10 13:38:25
【问题描述】:
我有一个项目数据框,其中包含在不同时间发生的一定数量的不同事件。例如假设我在各种足球比赛中经历过几次事件(进球、角球、红牌等)。我想计算每场比赛中每支球队在特定时间之前发生的每个事件的数量(每场比赛的时间不同)。
所以我可以有一个事件数据框(其中 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 场比赛中,第 45 分钟前,第 1 队有 2 个角球,0 球和 0 张红牌,而第 2 队有 1 个角球,0 球和 0 张红牌。
我一直在这样做,方法是使用 apply 来遍历和子集我之后的数据并计算行数,但是我有 1000 行,这需要很多时间。
有人知道最快的方法吗?
编辑:我没有提到任何 game_id 都可能在 eventTime 数据帧中以不同的时间出现多次。例如。 game_id 可能出现两次,时间分别为 45 和 70,我想为每个独特的事件/时间组合获取适当的计数。
【问题讨论】:
标签: r events time count dataframe