r - 使用 dplyr mutate 将列名传递给函数,而不使用折旧的 mutate_

标签 r function dplyr

我意识到这似乎与已经提出的其他问题很接近,并且似乎在 https://cran.r-project.org/web/packages/dplyr/vignettes/programming.html 上得到了解答。 但我下面显示的内容似乎遵循了该建议,但没有成功。 数据如下:

 d<-tibble(y=c(1,2,3,NA))

首先是有效的:

my.f <- function(df,column_var){
  df %>%
  mutate(z = y) %>%
  filter(!is.na(z))
}
my.f(d,quo(z))

现在我想产生相同的结果,但不起作用:

my.f <- function(df,column_var){
  df %>%
  mutate(!!column_var = y) %>%
  filter(!is.na(!!column_var))
}
my.f(d,quo(z))

Error: unexpected '=' in:
"  df %>%
mutate(!!column_var ="

最佳答案

要设置变量名称,您需要在左侧使用一个字符串和 := 而不是 mutate 中的 =

您可以使用 quo_namez 转换为列名称的字符串。

您的函数可能如下所示:

my.f = function(df, column_var) {
     column_var = enquo(column_var)

     df %>%
       mutate(!!quo_name(column_var) := y) %>%
       filter( !is.na(!!column_var) )
}

my.f(d, z)

# A tibble: 3 x 2
      y     z
  <dbl> <dbl>
1     1     1
2     2     2
3     3     3

关于r - 使用 dplyr mutate 将列名传递给函数,而不使用折旧的 mutate_,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45556169/

相关文章:

r - 使用 scatterpie 或 ggforce 制作多个饼图

c++ - strcspn() 和 strpbrk() 有什么区别?

r - dplyr:group_by 和 group_by_ 函数有什么区别?

r for 循环在单个数据框中导入 xlsx 文件

r - data.table:满足条件后删除所有行

r - 从电子邮件正文中的附件和图像中提取 Zip+CSV 文件

javascript - 如何在 jQuery 函数中使用类方法?

javascript - Jquery inArray 方法不适用于多维数组

r - 是否可以动态改变列(列中的值具有其他列名称)

r - 哪种方法可以最快地得出 R 数据框列的条件最小值?