我有下面的代码行,我试图更改数据帧中不同位置(QB,RB,WR,TE)的fpts值,但对于其他两个位置(DST,K则保持相同) )。如果运行此命令,则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}))
我们可以使用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>
注意:首先在此处发布%in%