在mutate_at

时间:2017-12-19 13:19:37

标签: r dplyr mutate

我想在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 个答案:

答案 0 :(得分:8)

我们需要,来区分每个案例。另外,如果我们将最后一个选项保留为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(.)
        )))