如何将此代码从mutate_转换为mutate?

时间:2019-04-10 00:52:14

标签: r dplyr

我试图基于一个变量创建一列的副本-也就是说,新列的名称是常量,但是它复制的那个更改。这是我之前要做的:

library(dplyr)

x <- "mpg"

mtcars %>%
  mutate_(Target = x)

要接收这样的结果: enter image description here

但是,运行此命令时,您会收到一条警告:

Warning message:
mutate_() is deprecated. 
Please use mutate() instead

它建议查看https://tidyeval.tidyverse.org/以获得指导;我快速浏览了一下,但没有在文档中发现它是用例。 (它似乎没有涵盖转换现有代码的问题,但也许我只是不太了解它?)

如何将这段代码从mutate_()移到mutate()

4 个答案:

答案 0 :(得分:3)

您需要遵守dplyr的非标准评估

mtcars %>% mutate(Target = !!sym(x))
#    mpg cyl  disp  hp drat    wt  qsec vs am gear carb Target
#1  21.0   6 160.0 110 3.90 2.620 16.46  0  1    4    4   21.0
#2  21.0   6 160.0 110 3.90 2.875 17.02  0  1    4    4   21.0
#3  22.8   4 108.0  93 3.85 2.320 18.61  1  1    4    1   22.8
#4  21.4   6 258.0 110 3.08 3.215 19.44  1  0    3    1   21.4
#5  18.7   8 360.0 175 3.15 3.440 17.02  0  0    3    2   18.7
#6  18.1   6 225.0 105 2.76 3.460 20.22  1  0    3    1   18.1
...

此处sym将字符串作为输入并将其转换为符号,然后可以使用bang-bang运算符!!将其取消引用。

还请注意,mutate_已过时。

答案 1 :(得分:1)

我们可以使用sbb same,same,它也可以用于多列

mutate_at

答案 2 :(得分:0)

您可以使用rlang::sym或基数R get

library(dplyr)

mtcars %>% mutate(Target = !!rlang::sym(x))

mtcars %>% mutate(Target = get(x))

答案 3 :(得分:0)

您也可以尝试这样的基本方式...

x <- mtcars$mpg
mtcars$Target <- x