r - 在mutate_at中使用case_when

标签 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()调用,为简洁起见,我没有将其包括在内。

最佳答案

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

关于r - 在mutate_at中使用case_when,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47887950/

相关文章:

r - Dplyr summarise_each 汇总结果

r - 应用group_by和summarise(sum),但保留具有不相关冲突数据的列?

r - data.table 中具有条件的每组总和

r - 如何在facet_grid中指定列或如何更改facet_wrap中的标签

r - R Hive Thrift客户

r - 如何在 r 中的 data.table 中评估(或创建)动态列

r - 如果另一个变量中的值在 dplyr 的列表中不匹配,则删除一个变量中的值

r - 如何从 R 中的一组中的最大值中找出每个组值的差异?

r - 如何在 R 中同时突变到多个具有相似名称的列?

r - 通过仅取组中与另一列上所选行相等的行的平均值来在组中进行变异