我想使用starts_with()识别变量,然后执行一次case_when突变。
例如,假设我要执行以下操作:
mtcars$mpg[mtcars$mpg == 21.0] <- 5; mtcars
我的尝试:
mtcars %>%
mutate_at(
vars(starts_with("mpg")),
funs(. = case_when(
. == 21.0 ~ 5,
TRUE ~ .
))
)
我究竟做错了什么? dplyr文档似乎没有mutate_at/mutate_each的许多示例(this thread似乎也有同样的提示),因此我很难使用这些功能。也许我找的地方不对?
我知道this thread,但无法在其中找到解决方案。
谢谢!
最佳答案
funs
创建一个函数列表,当您执行funs(. = ...)
时,它将创建名称为.
的命名函数,这将导致生成新列,如果您只有一列,则使用.
的名称生成,或者带有后缀的名称如果您要突变的栏位超过.
,则为funs
的栏位;如果您需要覆盖原始列,只需将匿名函数直接传递给. =
即可保留未命名的函数。就您而言,删除funs
中的ojit_code应该可以;
mtcars %>%
mutate_at(
vars(starts_with("mpg")),
funs(case_when(
. == 21.0 ~ 5,
TRUE ~ .
))
)
关于r - dplyr mutate_at和case_when,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49594820/