Below code when filter_variable
are in E I J H F G D
, it's working well, but when filter_variable <- 'ALL'
can't get the result. How to fix it or apply another replacement?
library(tidyverse)
filter_variable <- 'ALL'
diamonds %>% filter(color %in% ifelse(filter_variable =='ALL',
diamonds$color %>% unique() ,
filter_variable)
)
The ifelse()
function isn't particularly helpful in this situation; if you use if_else()
instead you get an error that describes the problem:
library(tidyverse)
filter_variable <- 'ALL'
diamonds %>% filter(color %in% if_else(filter_variable =='ALL',
diamonds$color %>% unique() ,
filter_variable)
)
#> Error in `filter()`:
#> ℹ In argument: ``%in%`(...)`.
#> Caused by error in `if_else()`:
#> ! `true` must have size 1, not size 7.
A potential solution for this issue (seven 'things' returned instead of one) is to use an 'if else' statement, e.g.
diamonds %>%
filter(color %in% if(filter_variable == 'ALL'){diamonds$color %>% unique()} else {filter_variable})
#> # A tibble: 53,940 × 10
#> carat cut color clarity depth table price x y z
#> <dbl> <ord> <ord> <ord> <dbl> <dbl> <int> <dbl> <dbl> <dbl>
#> 1 0.23 Ideal E SI2 61.5 55 326 3.95 3.98 2.43
#> 2 0.21 Premium E SI1 59.8 61 326 3.89 3.84 2.31
#> 3 0.23 Good E VS1 56.9 65 327 4.05 4.07 2.31
#> 4 0.29 Premium I VS2 62.4 58 334 4.2 4.23 2.63
#> 5 0.31 Good J SI2 63.3 58 335 4.34 4.35 2.75
#> 6 0.24 Very Good J VVS2 62.8 57 336 3.94 3.96 2.48
#> 7 0.24 Very Good I VVS1 62.3 57 336 3.95 3.98 2.47
#> 8 0.26 Very Good H SI1 61.9 55 337 4.07 4.11 2.53
#> 9 0.22 Fair E VS2 65.1 61 337 3.87 3.78 2.49
#> 10 0.23 Very Good H VS1 59.4 61 338 4 4.05 2.39
#> # ℹ 53,930 more rows
Created on 2024-10-08 with reprex v2.1.0