我想使用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/

10-12 18:48