繁体   English   中英

根据年份找到加权平均值

[英]Finding a Weighted Average Based on Years

我想创建 2017 年至 2019 年棒球统计 WAR 的加权平均值。平均值将为 go 如下:2019 年:57.14% 2018 年:28.57% 2017 年:14.29%

但是有些球员只在2018年和2019年打过,有些人在2019年和2017年打过。如果他们只打了两年,那将是67/33,只有一年显然是100%。

我想知道是否有一种简单的方法可以做到这一点。 我的数据集看起来像这样

            Name Season   G  PA HR BB_pct K_pct   ISO  wOBA wRC_plus  Def WAR
337  A.J. Pollock   2017 112 466 14    7.5  15.2 0.205 0.340      103  2.6 2.2
357  A.J. Pollock   2018 113 460 21    6.7  21.7 0.228 0.338      111  0.9 2.6
191 Aaron Altherr   2017 107 412 19    7.8  25.2 0.245 0.359      120 -7.9 1.4
162   Aaron Hicks   2017  88 361 15   14.1  18.6 0.209 0.363      128  6.4 3.4
186   Aaron Hicks   2018 137 581 27   15.5  19.1 0.219 0.360      129  2.3 5.0
464   Aaron Hicks   2019  59 255 12   12.2  28.2 0.208 0.325      102  1.3 1.1

年份因人而异,但想知道是否有人有办法根据他们玩的年份来做这个加权平均值。 如果有意义的话,我也不想要任何只有 2017 年的人。

我想,有一种简单的方法可以完成你的任务。 不幸的是,我的方法有点复杂。 我正在使用dplyrpurr

首先,我将这些权重放入一个列表中:

one_year  <- 1
two_years <- c(2/3, 1/3)
three_years <- c(4/7, 3/7, 1/7)
weights <- list(one_year, two_years, three_years)

接下来,我将数据集按每个玩家参加的赛季数拆分为一个列表:

df %>%
  group_by(Name) %>%
  mutate(n=n()) %>%
  arrange(n) %>%
  ungroup() %>%
  group_split(n) -> my_list

现在我定义一个 function 使用权重计算平均值:

WAR_average <- function(i) {my_list[[i]] %>% 
                              group_by(Name) %>% 
                              mutate(WAR_average = sum(WAR * weights[[i]]))}

最后,我在my_list上应用 function WAR_average并过滤/选择数据:

my_list %>%
  seq_along() %>%
  lapply(WAR_average) %>%             # apply function
  reduce(rbind) %>%                   # bind the dataframes into one df
  filter(Season != 2017 | n != 1) %>% # filter players only active in 2017 
  select(Name, WAR_average) %>%       # select player and war_average
  distinct()                          # remove duplicates

这整个过程返回

# A tibble: 2 x 2
# Groups:   Name [2]
  Name         WAR_average
  <chr>              <dbl>
1 A.J. Pollock        2.33
2 Aaron Hicks         4.24

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM