使用mutate_if(R dplyr软件包)还是其他函数?

时间:2019-06-20 04:48:31

标签: r dplyr

我想根据另一列中的值对一列中的值进行突变。例如,在mtcars数据集中,仅当cyl == 6时,才将8添加到“齿轮”列中的所有值。我尝试使用dplyr软件包中的mutate_if,如下所示,但是没有运气。任何建议欢迎。谢谢。

 library(dplyr)
 mtcars %>% mutate_if(mtcars$cyl == 6, gear = gear + 8)

1 个答案:

答案 0 :(得分:1)

我们可以使用mutate代替mutate_if,因为只有一栏可以更改,而且更容易。

library(dplyr)
mtcars %>%
      mutate(gear = case_when(cyl == 6 ~ gear + 8, TRUE ~ gear))

此外,如果有多列,我们可以使用mutate_at并指定感兴趣的变量

mtcars %>%
     mutate_at(vars(gear), list(~ case_when(cyl == 6 ~ . + 8, TRUE ~ .)))

mutate_if的使用略有不同。例如,如果我们只想更改数字列或factor列,则可以通过指定逻辑条件来更改整个列

iris %>%
      mutate_if(is.numeric, list(~ . + 10))

或使用data.table

library(data.table)
as.data.table(mtcars)[cyl == 6, gear := gear + 8]