如何在 mutate 函数的计算中使用变量?

How can I have use variables in the calculations of mutate function?

考虑这个著名的 table(已经存在于 R 中)

 head(iris)


Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1          5.1         3.5          1.4         0.2  setosa
2          4.9         3.0          1.4         0.2  setosa
3          4.7         3.2          1.3         0.2  setosa
4          4.6         3.1          1.5         0.2  setosa
5          5.0         3.6          1.4         0.2  setosa
6          5.4         3.9          1.7         0.4  setosa

请注意它有一个名为 Sepal.Length 的列。 我定义了一个同名的变量。请考虑此代码:

table = iris
Sepal.Length = 0
table2 = table %>% mutate ( new = Sepal.Length*Petal.Length )

如果检查结果:

head(table2)


Sepal.Length Sepal.Width Petal.Length Petal.Width Species  new
1          5.1         3.5          1.4         0.2  setosa 0.28
2          4.9         3.0          1.4         0.2  setosa 0.28
3          4.7         3.2          1.3         0.2  setosa 0.26
4          4.6         3.1          1.5         0.2  setosa 0.30
5          5.0         3.6          1.4         0.2  setosa 0.28
6          5.4         3.9          1.7         0.4  setosa 0.68

如您所见,变量 Sepal.Length = 0 已被忽略,列 table$Sepal.Length 已被考虑用于创建新列。

如何在 mutate 函数的计算中使用变量?

如果我们想使用 Global env 中的对象,它也是数据中的列名,请使用 .env

library(dplyr)
table2 <- table %>% 
      mutate ( new = Petal.Width* .env$Sepal.Length )

或者,将 !! 放在 Sepal.Length 前面,如此处所述

library(dplyr)

解决方案

table <- iris #no need to change the name of the dataset. But ok. 
Sepal.Length <- 0

table %>% mutate ( new = !!Sepal.Length*Petal.Length ) 

输出(头)

  Sepal.Length Sepal.Width Petal.Length Petal.Width Species new
1          5.1         3.5          1.4         0.2  setosa   0
2          4.9         3.0          1.4         0.2  setosa   0
3          4.7         3.2          1.3         0.2  setosa   0
4          4.6         3.1          1.5         0.2  setosa   0
5          5.0         3.6          1.4         0.2  setosa   0
6          5.4         3.9          1.7         0.4  setosa   0