Использование case_when в mutate_at
Я хотел бы использовать case_when
в mutate_at
, как в следующем примере:
mtcars %>%
mutate_at(.vars = vars(vs, am),
.funs = funs(case_when(
. %in% c(1,0,9) ~ TRUE
. %in% c(2,20,200) ~ FALSE
TRUE ~ as.character(.)
)))
альтернативная версия с использованием . =
вfuns()
звонок тоже не работает.
mtcars %>%
mutate_at(.vars = vars(vs, am),
.funs = funs(. = case_when(
. %in% c(1, 0, 9) ~ TRUE
. %in% c(2, 20, 200) ~ FALSE
TRUE ~ as.character(.)
)))
Желаемые результаты
mtcars %>%
mutate_at(.vars = vars(vs, am),
.funs = funs(ifelse(. %in% c(1, 0, 9), TRUE, FALSE)))
FALSE
может быть заменен вторымifelse()
звонок, который я не включил для краткости.
1 ответ
Решение
Нам нужно ,
отделить каждый случай. Кроме того, если мы сохраним последний вариант как character
тогда TRUE/FALSE
должен быть характер, а также. Нет смешивания типов
mtcars %>%
mutate_at(.vars = vars(vs, am),
.funs = funs(. = case_when(
. %in% c(1, 0, 9) ~ TRUE,
. %in% c(2, 20, 200) ~ FALSE,
TRUE ~ TRUE
)))
Если нам нужно сделать character
класс, а также вернуть столбец как символ, если один из двух случаев не является правильным, возможно,
mtcars %>%
mutate_at(.vars = vars(vs, am),
.funs = funs(. = case_when(
. %in% c(1, 0, 9) ~ "Yes",
. %in% c(2, 20, 200) ~ "No",
TRUE ~ as.character(.)
)))