r - 如何在保留整个数据框的同时将函数应用于我的数据子集?
问题描述
我正在处理 NHL 球员的表现数据,并且有一个包含以下变量(以及其他变量)的数据框。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")
在过去 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))
推荐阅读
- google-app-engine - Laravel:将 Laravel 8 api 部署到 Google Cloud App Engine
- r - ggplot中的堆积条形图
- android - Android Firebase 尝试使用主题在所有用户中发送通知缺少注册错误
- reactjs - 变异状态被认为是不好的做法,但是当我提交表单时如何避免变异状态?
- android - 如何使用 MVVM 架构在 Room Android 中获取数据
- java - -Xlog 选项无效
- excel - 在 Excel vba 中计算类型变量,可能吗?
- javascript - 异步函数调用后更新 Vue 数据值
- sorting - 公式按包含时间和文本的列排序,将文本放在最后,在 Google 表格中
- regex - Searching for 2 keywords on same line in Notepad++