我想用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,但无法在那里找到解决方案。
谢谢!
答案 0 :(得分:9)
funs
创建一个函数列表,当您执行funs(. = ...)
时,它会创建名为.
的命名函数,这会导致使用以下任一项生成新列如果您只有一列,则.
的名称;如果您有多列要变异,则名称后缀为.
;如果您需要覆盖原始列,只需将匿名函数直接传递给funs
即可保留未命名的函数。在您的情况下,删除. =
中的funs
应该有效;
mtcars %>%
mutate_at(
vars(starts_with("mpg")),
funs(case_when(
. == 21.0 ~ 5,
TRUE ~ .
))
)