[英]How to apply a function to certain columns while keeping the entire data frame?
[英]How do I apply a function to a subset of my data while retaining the entire data frame?
我正在使用NHL播放器性能數據,並且具有一個包含以下變量的數據框(以及其他變量)。 war_lost是衡量由於球員受傷而整個賽季損失的球員價值的指標。 數據涵蓋了從2009-2010年到2017-2018年的9個季節。
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")
在過去3年中平均未參加45場比賽(weighted_games_played)
,那么我將認為他們是備用守門員,並將他們的war_lost乘以系數x考慮他們可能會因受傷缺席的比賽數。
如果守門員在過去3年中平均踢了45場比賽,那么我將認為他們是首發守門員,並將他們的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)
遵循這些原則? 建議非常歡迎!
您可以使用dplyr::case_when
。 如果您的數據稱為df
,則可以使用以下代碼
library(dplyr)
df %>%
mutate(war_lost =
case_when(position == 'G' & weighted_games_played < 45
~ 0.4*war_lost,
position == 'G'
~ 0.6*war_lost,
T ~ war_lost))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.