gpt4 book ai didi

r - 基于 R 内的条件,在许多列上进行迭代减法

转载 作者:行者123 更新时间:2023-12-02 09:12:30 26 4
gpt4 key购买 nike

我的数据包含足球比赛结果的统计数据,包括 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”,我希望从获胜(结果 ==“获胜”)团队中扣除每一个失败的(结果 ==“损失”关键绩效指标)。我的数据集并不总是按输,赢,输,赢,所以连续完成这个。明智的方式可能是不可能的。

我已经使用 dplyr 尝试了以下操作:

 Differences <- Test %>% 
group_by(MatchID) %>%
summarise_at( .vars = names(.)[3:7], ((Outcome == "Win") - (Outcome == "Loss")))

但担心我使用了错误的方法,因为我收到了以下错误:继承错误(x,“fun_list”):找不到对象“结果”

我的预期结果是:

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 可以实现这一点吗?

最佳答案

两个逻辑向量的差异具有相同的长度。我们需要对 'Outcome' 为 "Win" 的 'Var' 列进行子集化,取其 sum 并从 'Outcome' 为 的列中减去它>“损失”

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

或者另一种选择是将聚集为“长”格式,通过总和的差值获得组,并将其传播为“宽” ' 格式

Test %>% 
gather(key, val, Var1:Var5) %>%
group_by(MatchID, key) %>%
summarise(val = sum(val[Outcome == "Win"]) - sum(val[Outcome == "Loss"])) %>%
spread(key, val)

关于r - 基于 R 内的条件,在许多列上进行迭代减法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50560041/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com