The hardware and bandwidth for this mirror is donated by METANET, the Webhosting and Full Service-Cloud Provider.
If you wish to report a bug, or if you are interested in having us mirror your free-software or open-source project, please feel free to contact us at mirror[@]metanet.ch.
incase provides a more pipe-friendly alternative to
dplyr’s
case_when()
and if_else()
.
You can install the released version of incase from CRAN with:
install.packages("incase")
or the development version from GitHub with:
# install.packages("pak")
::pkg_install("rossellhayes/incase") pak
incase’s in_case()
and
if_case()
accept a vector as their first input, allowing
you to take full advantage of magrittr’s
.
1:20 %>%
in_case(
%% 15 == 0 ~ "fizz buzz",
. %% 3 == 0 ~ "fizz",
. %% 5 == 0 ~ "buzz",
. TRUE ~ .
)#> [1] "1" "2" "fizz" "4" "buzz" "fizz"
#> [7] "7" "8" "fizz" "buzz" "11" "fizz"
#> [13] "13" "14" "fizz buzz" "16" "17" "fizz"
#> [19] "19" "buzz"
1:20 %>% if_case(. %% 3 == 0, "fizz", .)
#> [1] "1" "2" "fizz" "4" "5" "fizz" "7" "8" "fizz" "10"
#> [11] "11" "fizz" "13" "14" "fizz" "16" "17" "fizz" "19" "20"
incase functions automatically coerce types. This is
especially useful when dealing with integers or NA
s.
<- -1:5
x
# Replace -1 with NA
::case_when(x == -1 ~ NA, TRUE ~ x)
dplyr#> [1] NA 0 1 2 3 4 5
::case_when(x == -1 ~ NA_integer_, TRUE ~ x)
dplyr#> [1] NA 0 1 2 3 4 5
in_case(x == -1 ~ NA, TRUE ~ x)
#> [1] NA 0 1 2 3 4 5
# Replace -1 with 0
::case_when(x == -1 ~ 0, TRUE ~ x)
dplyr#> [1] 0 0 1 2 3 4 5
::case_when(x == -1 ~ 0L, TRUE ~ x)
dplyr#> [1] 0 0 1 2 3 4 5
in_case(x == -1 ~ 0, TRUE ~ x)
#> [1] 0 0 1 2 3 4 5
With incase, you no longer have to worry about
specifying the type of your NA
s or adding L
to
your integers.
in_case()
adds preserve
and
default
arguments as a more intuitive alternative to
TRUE ~ ...
.*
1:20 %>%
in_case(
%% 15 == 0 ~ "fizz buzz",
. %% 3 == 0 ~ "fizz",
. %% 5 == 0 ~ "buzz"
.
)#> [1] NA NA "fizz" NA "buzz" "fizz"
#> [7] NA NA "fizz" "buzz" NA "fizz"
#> [13] NA NA "fizz buzz" NA NA "fizz"
#> [19] NA "buzz"
1:20 %>%
in_case(
%% 15 == 0 ~ "fizz buzz",
. %% 3 == 0 ~ "fizz",
. %% 5 == 0 ~ "buzz",
. preserve = TRUE
)#> [1] "1" "2" "fizz" "4" "buzz" "fizz"
#> [7] "7" "8" "fizz" "buzz" "11" "fizz"
#> [13] "13" "14" "fizz buzz" "16" "17" "fizz"
#> [19] "19" "buzz"
1:20 %>%
in_case(
%% 15 == 0 ~ "fizz buzz",
. %% 3 == 0 ~ "fizz",
. %% 5 == 0 ~ "buzz",
. default = "pass"
)#> [1] "pass" "pass" "fizz" "pass" "buzz" "fizz"
#> [7] "pass" "pass" "fizz" "buzz" "pass" "fizz"
#> [13] "pass" "pass" "fizz buzz" "pass" "pass" "fizz"
#> [19] "pass" "buzz"
switch_case()
works as a convenient shorthand for
in_case()
when recoding discrete values.
parties#> [1] "G" "I" "D" "I" "R" "D" "L" "D" NA "L" NA "G" "R" NA "G" NA "L" "D" "D"
#> [20] "I"
%>%
parties switch_case(
"D" ~ "Democrat",
"R" ~ "Republican",
c("G", "L") ~ "Other",
c("I", NA) ~ "Independent"
)#> [1] "Other" "Independent" "Democrat" "Independent" "Republican"
#> [6] "Democrat" "Other" "Democrat" "Independent" "Other"
#> [11] "Independent" "Other" "Republican" "Independent" "Other"
#> [16] "Independent" "Other" "Democrat" "Democrat" "Independent"
grep_case()
allows you to recode values with pattern
matching.
<- c(
countries "France", "Ostdeutschland", "Westdeutschland", "Nederland",
"België (Vlaanderen)", "Belgique (Wallonie)", "Luxembourg", "Italia"
)
grep_case(
countries,"Deutschland" ~ "Germany",
"Belg" ~ "Belgium",
"Nederland" ~ "Netherlands",
"Italia" ~ "Italy",
preserve = TRUE,
ignore.case = TRUE
)#> [1] "France" "Germany" "Germany" "Netherlands" "Belgium"
#> [6] "Belgium" "Luxembourg" "Italy"
When you need an ordered factor, the *_fct()
family of
functions lets you save a step by using the order of your cases as the
order of your factor levels. Use ordered = TRUE
to create
an ordered factor and ordered = FALSE
to make a regular-old
factor.
<- runif(10, 0, 10)
data
data#> [1] 3.9075340 7.4098608 2.1540250 8.4599089 3.0487929 8.9268192 9.9001603
#> [8] 9.2022173 0.3128016 5.2452107
%>%
data in_case_fct(
< 3 ~ "Low",
. < 7 ~ "Medium",
. default = "High",
ordered = TRUE
)#> [1] Medium High Low High Medium High High High Low Medium
#> Levels: Low < Medium < High
%>%
parties switch_case_fct(
"D" ~ "Democrat",
"R" ~ "Republican",
c("G", "L") ~ "Other",
c("I", NA) ~ "Independent"
)#> [1] Other Independent Democrat Independent Republican Democrat
#> [7] Other Democrat Independent Other Independent Other
#> [13] Republican Independent Other Independent Other Democrat
#> [19] Democrat Independent
#> Levels: Democrat Republican Other Independent
Hex sticker fonts are Source Sans by Adobe and Hasklig by Ian Tuomi.
Please note that incase is released with a Contributor Code of Conduct. By contributing to this project, you agree to abide by its terms.
* Intuitiveness may vary from person to person.
These binaries (installable software) and packages are in development.
They may not be fully stable and should be used with caution. We make no claims about them.