Я работаю с данными о производительности игроков НХЛ, и у меня есть фрейм данных со следующими переменными (среди прочих). war_lost - это показатель ценности игрока, потерянного за весь сезон из-за травмы игрока. Данные охватывают 9 сезонов, с 2009-2010 по 2017-2018 годы.
first_name last_name position_new season team weighted_games_played war_lost
<chr> <chr> <chr> <chr> <chr> <dbl> <dbl>
CAREY PRICE G 2015-2016 MTL 48.7 6.40
SIDNEY CROSBY F 2011-2012 PIT 48.6 5.59
SIDNEY CROSBY F 2010-2011 PIT 64.8 3.88
COREY CRAWFORD G 2017-2018 CHI 47.6 3.63
JONATHAN QUICK G 2016-2017 LAK 50.1 3.30
STEVEN STAMKOS F 2013-2014 TBL 41.0 2.81
HENRIK LUNDQVIST G 2014-2015 NYR 76.9 2.30
CONNOR MCDAVID F 2015-2016 EDM 45.0 2.20
ZACH PARISE F 2010-2011 NJD 46.4 1.98
JOHN GIBSON G 2014-2015 ANA 23.0 1.96
JOHAN FRANZEN F 2009-2010 DET 39.0 1.94
VIKTOR FASTH G 2013-2014 ANA 18.0 1.89
ANTON KHUDOBIN G 2013-2014 CAR 36.0 1.86
TOMAS HERTL F 2013-2014 SJS 44.0 1.84
STEVEN STAMKOS F 2016-2017 TBL 43.3 1.82
JONAS HILLER G 2010-2011 ANA 53.6 1.80
CAM WARD G 2009-2010 CAR 46.0 1.78
PAUL MARTIN D 2009-2010 NJD 27.0 1.72
ANTTI RAANTA G 2017-2018 ARI/PHX 36.6 1.62
LUBOMIR VISNOVSKY D 2013-2014 NYI 54.4 1.50
Если вратарь (position_new == "G")
сыграл в среднем менее 45 игр за последние 3 года (weighted_games_played)
, то я буду считать их запасным вратарём и умножим их war_lost на коэффициент x для учета по количеству игр, в которые они, вероятно, будут играть из пропущенных игр из-за травмы.
Если вратарь сыграл в среднем более 45 игр за последние 3 года, то я буду считать их стартовым вратарём и умножим их war_lost на коэффициент y, чтобы учесть количество игр, которое они могут играть в игры, которые они пропустили из-за травмы.
Я рассмотрел несколько различных методов (написание пользовательской функции, ifelse (), метод purrr), но мне трудно обдумать некоторые из основополагающих принципов, главным образом, как мне поступить сохраняя все мои данные, в то же время элегантно модифицируя наблюдения вратарей. Возможно, что-то вроде:
data <- data %>%
ifelse(position == "G",
ifelse(weighted_games_played < 45, mutate(war_lost = 0.4 * war_lost),
mutate(war_lost = 0.6 * war_lost)),
DO NOTHING IF NOT G)
Что-то в этом роде? Предложения очень приветствуются!