我试图基于一个变量创建一列的副本-也就是说,新列的名称是常量,但是它复制的那个更改。这是我之前要做的:
library(dplyr)
x <- "mpg"
mtcars %>%
mutate_(Target = x)
但是,运行此命令时,您会收到一条警告:
Warning message:
mutate_() is deprecated.
Please use mutate() instead
它建议查看https://tidyeval.tidyverse.org/以获得指导;我快速浏览了一下,但没有在文档中发现它是用例。 (它似乎没有涵盖转换现有代码的问题,但也许我只是不太了解它?)
如何将这段代码从mutate_()
移到mutate()
?
答案 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