如何基于data.table中的其他列创建索引列?

时间:2017-08-09 22:19:14

标签: r data.table

我有一个data.table DF如下。第三个库是当时拥有球的球队(以分钟和秒为单位)。

y

我想创建两个新列。每一个总计每个团队的目标数量。例如,输出应为:

    minute second    teamId   isGoal     
 1:     10     22 Atletico MG      0
 2:     10     26 Atletico MG      0
 3:     10     30 Atletico MG      0
 4:     10     33 Atletico MG      0
 5:     10     35 Atletico MG      0
 6:     10     37 Atletico MG      0
 7:     10     38 Atletico MG      1
 8:     10     40 Atletico GO      0
 9:     10     42 Atletico GO      0
10:     10     48 Atletico GO      1
11:     10     51 Atletico MG      0
12:     10     54 Atletico MG      1
13:     10     60 Atletico MG      0

想要避免for循环。我确定在data.table中必须很容易,但是怎么做?

1 个答案:

答案 0 :(得分:1)

以下是使用dplyr和“玩具”示例的解决方案,该示例与您在开场白中提供的数据框架类似。

基本上,如果该团队在数据帧的特定行中对目标进行了评分,基本上您希望每个团队的列都有一个指标。然后使用cumsum()函数在这些新生成的列中累积。

library(dplyr)
x <- data.frame( teamID=c('A', 'A', 'B', 'A', 'A', 'B', 'B', 'B', 'A'),
                 isGoal=c(0,0,1,0,1,0,0,1, 0) ) %>%
mutate( AGoal = cumsum( isGoal*(teamID=='A') ),
        BGoal = cumsum( isGoal*(teamID=='B') ) )

输出:

teamID isGoal AGoal BGoal
A      0      0     0
A      0      0     0
B      1      0     1
A      0      0     1
A      1      1     1
B      0      1     1
B      0      1     1
B      1      1     2
A      0      1     2