Я хотел бы иметь возможность использовать dplyr
case_when
программным способом для замены базовой функции R cut()
.
В настоящее время case_when можно использовать с внешним аргументом через NSE, например:
library(dplyr)
library(rlang)
patterns <- list(
x <= 2 ~ "<=2",
x <= 4 ~ "2<->4",
x > 4 ~ ">4"
)
x <- 1:10
case_when(!!!patterns)
Что я хочу сделать, так это использовать его с другой переменной внутри мутации.
Идея была бы примерно такой, хотя я не могу понять, как заставить ее работать:
library(dplyr)
patterns_lazy <- list(
!!quo(x) <= 2 ~ "<=2",
!!quo(x) <= 4 ~ "2<->4",
!!quo(x) > 4 ~ ">4"
)
x <- "cyl"
mtcars %>% mutate(ABC = case_when(!!!patterns_lazy))
Я хотел бы иметь возможность определить столбец (внутри строки), который я хочу фильтровать, и получить что-то вроде этого (этот пример не работает, поскольку это желаемый синтаксис):
x <- "cyl"
mtcars %>%
select(cyl) %>%
mutate(ABC = case_when(!!!patterns_lazy)) %>%
head()
cyl ABC
1 6 >4
2 6 >4
3 4 2<->4
4 6 >4
5 8 >4
6 6 >4
Спасибо за любую помощь :)