簡體   English   中英

如何在保留整個數據幀的同時將函數應用於數據的子集?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM