Использование 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(.)
        ))) 
Другие вопросы по тегам