我的数据包含足球比赛结果的统计数据,包含12806个观察值(比赛结果)和34个关键绩效指标。
我的data.frame的一个(小)示例如下:
head(Test)
MatchID Outcome Var1 Var2 Var3 Var4 Var5
1 30 Loss 0 10 0 10 0
2 30 Win 6 13 6 13 6
3 31 Loss 8 12 3 6 3
4 31 Win 29 40 9 19 3
5 32 Loss 7 26 7 26 6
6 32 Win 11 20 11 20 9
对于每个唯一的“比赛ID”,我希望从获胜(Outcome ==“ Win”)团队中扣除每项失利(Outcome ==“ Loss”)关键绩效指标。我的data.set并不总是由Loss,Win ,损失,胜利,因此可能无法连续完成此操作。
我已经尝试使用dplyr进行以下操作:
Differences <- Test %>%
group_by(MatchID) %>%
summarise_at( .vars = names(.)[3:7], ((Outcome == "Win") - (Outcome == "Loss")))
但是担心我使用了错误的方法,因为我收到以下错误: Error in inherits(x, "fun_list") : object 'Outcome' not found
我的预期结果将是:
head(AnticipatedOutcome)
MatchID Var1 Var2 Var3 Var4 Var5
1 30 6 3 6 3 6
3 31 21 28 6 13 0
5 32 4 -6 4 -6 3
使用dplyr是否可以实现?
两个逻辑向量之差的长度相同。我们需要将“结果”为“变量”列的子集"Win"
,取其中sum
的值,然后从“结果”为的列中减去"Loss"
library(tidyverse)
Test %>%
group_by(MatchID) %>%
summarise_at(vars(starts_with('Var')),
funs(sum(.[Outcome == "Win"]) - sum(.[Outcome == "Loss"])))
# A tibble: 3 x 6
# MatchID Var1 Var2 Var3 Var4 Var5
# <int> <int> <int> <int> <int> <int>
#1 30 6 3 6 3 6
#2 31 21 28 6 13 0
#3 32 4 -6 4 -6 3
或另一种选择是将其转换gather
为“长”格式,按相差的方式将其分组,sum
然后将spread
其转换为“宽”格式
Test %>%
gather(key, val, Var1:Var5) %>%
group_by(MatchID, key) %>%
summarise(val = sum(val[Outcome == "Win"]) - sum(val[Outcome == "Loss"])) %>%
spread(key, val)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句