R: if_else, ifelse - PullRequest
       5

R: if_else, ifelse

1 голос
/ 09 октября 2019

Я новичок в R и добираюсь до него через долгое время. Я получил с сайта данные о неделе 1 НФЛ, пытаясь выполнить небольшой ifelse, и он не работает. Мне нужно имя команды в поле результатов

#this works only when condition is true and doesn't when condition is false
wk1$tm_won= if_else(wk1$home_score < wk1$away_score, wk1$away_team, wk1$home_team)  

#this doesn't work - gives me the difference
wk1$tm_won1 <- ifelse(wk1$home_score < wk1$away_score, wk1$away_team, wk1$home_team)

#this doesn't work - gives me difference and not the team name
wk1 %>%
    mutate(tm_won2 = ifelse (home_score < away_score, away_team,
                     ifelse (home_score > away_score, home_team, NA)))
#this doesn't work 
wk1 %>%
    mutate(tm_won = case_when(
        home_score < away_score ~ away_team,
        home_score > away_score ~ home_team,
        TRUE ~ a ))# DRAW

Мой набор данных результатов:

season  week    home_team   away_team   home_score  away_score  tm_won  tm_won1 tm_won2
2019    1   CHI GB  3   10  GB  7   7
2019    1   CAR LA  27  30  LA  11  11
2019    1   PHI WAS 32  27  <NA>    14  14
2019    1   NYJ BUF 16  17  BUF 3   3
2019    1   MIN ATL 28  12  <NA>    9   9

1 Ответ

0 голосов
/ 09 октября 2019

То, что здесь происходит, это то, что ваши команды на самом деле factors (которые под капотом всего лишь integer векторов) вместо characters. Если столбцы characters, то, по сути, все ваши решения работают как положено. Причина, по которой выходные данные различны, заключается в том, что dplyr пытается быть умным в отношении факторов и делает их удобочитаемыми, когда это возможно.


library(dplyr)
#> 
#> Attaching package: 'dplyr'
#> The following objects are masked from 'package:stats':
#> 
#>     filter, lag
#> The following objects are masked from 'package:base':
#> 
#>     intersect, setdiff, setequal, union

wk1 <- read.table(text = 'season  week    home_team   away_team   home_score  away_score  tm_won  tm_won1 tm_won2
                  2019    1   CHI GB  3   10  GB  7   7
                  2019    1   CAR LA  27  30  LA  11  11
                  2019    1   PHI WAS 32  27  <NA>    14  14
                  2019    1   NYJ BUF 16  17  BUF 3   3
                  2019    1   MIN ATL 28  12  <NA>    9   9', header = T, stringsAsFactors = FALSE)

if_else(wk1$home_score < wk1$away_score, wk1$away_team, wk1$home_team)  
#> [1] "GB"  "LA"  "PHI" "BUF" "MIN"

ifelse(wk1$home_score < wk1$away_score, wk1$away_team, wk1$home_team)
#> [1] "GB"  "LA"  "PHI" "BUF" "MIN"

wk1 <- read.table(text = 'season  week    home_team   away_team   home_score  away_score  tm_won  tm_won1 tm_won2
                  2019    1   CHI GB  3   10  GB  7   7
                  2019    1   CAR LA  27  30  LA  11  11
                  2019    1   PHI WAS 32  27  <NA>    14  14
                  2019    1   NYJ BUF 16  17  BUF 3   3
                  2019    1   MIN ATL 28  12  <NA>    9   9', header = T)

if_else(wk1$home_score < wk1$away_score, wk1$away_team, wk1$home_team)  
#> Warning in `[<-.factor`(`*tmp*`, i, value = structure(c(5L, 3L), .Label =
#> c("CAR", : invalid factor level, NA generated
#> [1] GB   LA   <NA> BUF  <NA>
#> Levels: ATL BUF GB LA WAS

ifelse(wk1$home_score < wk1$away_score, wk1$away_team, wk1$home_team)
#> [1] 3 4 5 2 3

Создано в 2019-10-09 представьте пакет (v0.3.0)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...