(抱歉标题很糟糕,不知道如何用一句话来表达我的问题。)
我有一个按时间顺序排序的匹配的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