在mutate()中使用列函数的变量

时间:2018-04-03 05:56:17

标签: r dplyr

如何在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))

2 个答案:

答案 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