如何在dplyr字符串中使用变量代替列名?举个例子,我想在虹膜数据集中添加一个名为sum的列,它是Sepal.Length和Sepal.Width的总和。简而言之,我想要下面代码的工作版本。
x = "Sepal.Length"
y = "Sepal.Width"
head(iris%>% mutate(sum = x+y))
目前,运行代码输出"评估错误:二元运算符的非数字参数"因为R将x和y计算为字符向量。我如何让R来评估x和y作为数据帧的列名?我知道答案是使用某种形式的惰性评估,但我无法确定如何配置它。
请注意,建议的副本:dplyr - mutate: use dynamic variable names未解决此问题。副本回答了这个问题:
不是我的问题:我该怎么做:
var = "sum"
head(iris %>% mutate(var = Sepal.Length + Sepal.Width))
答案 0 :(得分:1)
它也可以与get()一起使用:
> rm(list = ls())
> data("iris")
>
> library(dplyr)
>
> x <- "Sepal.Length"
> y <- "Sepal.Width"
>
> head(iris %>% mutate(sum = get(x) + get(y)))
Sepal.Length Sepal.Width Petal.Length Petal.Width Species sum
1 5.1 3.5 1.4 0.2 setosa 8.6
2 4.9 3.0 1.4 0.2 setosa 7.9
3 4.7 3.2 1.3 0.2 setosa 7.9
4 4.6 3.1 1.5 0.2 setosa 7.7
5 5.0 3.6 1.4 0.2 setosa 8.6
6 5.4 3.9 1.7 0.4 setosa 9.3
答案 1 :(得分:1)
我认为推荐的方式是使用sym
:
iris %>% mutate(sum = !!sym(x) + !!sym(y)) %>% head