R:计算data.table

时间:2017-12-08 21:25:04

标签: r data.table

(抱歉标题很糟糕,不知道如何用一句话来表达我的问题。)

我有一个按时间顺序排序的匹配的data.table,P1代表player1,P2代表player2,Res代表P1是否赢了(" w")或画了(" d&# 34;)对抗P2。 编辑:P1和P2列中的a,b和c代表各个玩家。把它们想象成爱丽丝,鲍勃和查理。

DT <- data.table(time = 1:10,
             P1 = c("a", "a", "b", "b", "b", "a", "a", "b", "a", "c"),
             Res = c("d", "w", "w", "w", "w", "w", "d", "d", "w", "w"),
             P2 = c("b", "c", "c", "a", "a", "c", "c", "a", "b", "b"))

我执行了以下操作来计算比赛时的 ,P1获胜的次数(wins1)以及P2的损失数量(损失2)。

DT[, wins1 := shift(cumsum(Res == "w"), 1, fill=0L), by=P1]
DT[, loss2 := shift(cumsum(Res == "w"), 1, fill=0L), by=P2]

我正在尝试为wins2,loss1,draw1和draw2创建列。 也就是说,我现在知道P1在与P2的比赛中获得了多少胜利,但我不知道他们有多少损失。希望有道理。我确定创建这些列的方法都是相似的,所以如果我可以制作一个,我应该能够制作它们。

决赛桌应如下所示:

     time P1 Res P2 wins1 loss1 draw1 wins2 loss2 draw2
 1:    1  a   d  b     0     0     0     0     0     0
 2:    2  a   w  c     0     0     1     0     0     0
 3:    3  b   w  c     0     0     1     0     1     0
 4:    4  b   w  a     1     0     1     1     0     1
 5:    5  b   w  a     2     0     1     1     1     1
 6:    6  a   w  c     1     2     1     0     2     0
 7:    7  a   d  c     2     2     1     0     3     0
 8:    8  b   d  a     3     0     1     2     2     2
 9:    9  a   w  b     2     2     2     3     0     1
10:   10  c   w  b     0     3     1     3     1     1

0 个答案:

没有答案