我想根据另一列中的值对一列中的值进行突变。例如,在mtcars数据集中,仅当cyl == 6时,才将8添加到“齿轮”列中的所有值。我尝试使用dplyr软件包中的mutate_if,如下所示,但是没有运气。任何建议欢迎。谢谢。
library(dplyr)
mtcars %>% mutate_if(mtcars$cyl == 6, gear = gear + 8)
答案 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]