【问题标题】:Want to keep original values when using if_else() in mutate() if condition isn't met如果条件不满足,希望在 mutate() 中使用 if_else() 时保留原始值
【发布时间】:2020-09-03 12:27:11
【问题描述】:

我有下面的代码行,我试图更改数据帧中不同位置(QB、RB、WR、TE)的 fpts 值,但其他两个位置(DST、 ķ)。如果我运行它,fpts 的 QB、RB、WR、TE 位置值会发生变化,但 DST 和 K fpts 会变为 0。知道为什么会这样吗?所有位置的 fpts 列中已经有值,但我只想更改我提到的这四个位置的 fpts 值。

library(tidyverse)
library(dplyr)

projections <-read_csv("https://raw.githubusercontent.com/samhoppen/2020_FF_Analysis/master/Functions/Projections.csv")

projections <- projections %>% 
     mutate(fpts = (if(position == "QB" || position == "RB" || position == "WR" || position == "TE"){
                             (pass_yds * 0.1) +
                                 (pass_tds * 4) +
                                 (pass_ints * -2) +
                                 (rush_yds * 0.1) +
                                 (rush_tds * 6) + 
                                 (fl * -2) +
                                 (rec_rec * 1) +
                                 (rec_yds * 0.1) +
                                 (rec_tds * 6)}
              else{fpts}))

【问题讨论】:

  • mutate(fpts = if_else(some &amp; (long | conditional), new_value, fpts)) 如果条件不成立,则保留其原始值。
  • 顺便说一句,if_else(position %in% c("QB", "RB", "WR", "TE"), (lots_of_math), fpts)

标签: r if-statement dplyr


【解决方案1】:

我们可以使用case_when/ifelse 代替if/else,因为if/else 没有矢量化,即它需要单个元素而不是整个列

library(dplyr)
projections %>%
    mutate(fpts = case_when(position %in% c('QB', 'RB', 'WR', 'TE')~ 
     (pass_yds * 0.1) +
                             (pass_tds * 4) +
                             (pass_ints * -2) +
                             (rush_yds * 0.1) +
                             (rush_tds * 6) + 
                             (fl * -2) +
                             (rec_rec * 1) +
                             (rec_yds * 0.1) +
                             (rec_tds * 6), TRUE ~ fpts))
# A tibble: 790 x 16
#   player team  position pass_att pass_cmp pass_yds pass_tds pass_ints rush_att rush_yds rush_tds    fl  fpts
#   <chr>  <chr> <chr>       <dbl>    <dbl>    <dbl>    <dbl>     <dbl>    <dbl>    <dbl>    <dbl> <dbl> <dbl>
# 1 Lamar… BAL   QB           465.     297.    3465.     29.8      11.9    156.     968.       5.5   4.1  564.
# 2 Patri… KC    QB           558.     361     4453.     33.3       9.8     72.3    353.       3.7   3.5  609.
# 3 Dak P… DAL   QB           558.     363     4463.     28.6      12.4     53.4    269.       3.8   3.3  579.
# 4 Desha… HOU   QB           515.     339.    3997.     25.3      14.8     94.8    509.       5.1   3.7  545.
# 5 Russe… SEA   QB           478.     312     3842.     29.2       8.5     77.7    414.       2.5   2.9  535.
# 6 Kyler… ARI   QB           542.     349.    3733.     24.9      15.1     94.9    525        3.7   2.7  512.
# 7 Josh … BUF   QB           510.     299.    3479.     20.1      13.8    106.     612.       7.2   5.2  495.
# 8 Tom B… TB    QB           559      347.    4447.     29.3      11.8     25.7     32.3      1.8   2.6  547.
# 9 Matt … ATL   QB           621.     407.    4604.     27.6      14.9     33      128.       1     4.6  551.
#10 Drew … NO    QB           517.     365.    3889      30.5       9.5     19.7     21.7      1.7   1.8  501.
# … with 780 more rows, and 3 more variables: rec_rec <dbl>, rec_yds <dbl>, rec_tds <dbl>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-18
    • 2021-10-30
    • 1970-01-01
    • 2016-09-10
    • 1970-01-01
    • 2020-11-14
    • 2021-02-09
    • 2018-02-27
    相关资源
    最近更新 更多