在dplyr中按动态列名称汇总

时间:2018-05-25 21:37:51

标签: r dplyr

所以我正在尝试在dplyr中进行一些编程,而我在使用enquo时遇到了一些问题!评估。

基本上我想将列变为动态列名,然后能够进一步操作该列(即汇总)。例如:

my_function <- function(data, column) {

  quo_column <- enquo(column)

  new_col <- paste0(quo_column, "_adjusted")[2]

  data %>%
     mutate(!!new_col := (!!quo_column) + 1) 
  }

my_function(iris, Petal.Length)

这很好用并返回一个名为“Petal.Length.adjusted”的列,它只是Petal.Length增加了一个。

但是我似乎无法总结这个新专栏。

my_function <- function(data, column) {

  quo_column <- enquo(column)

   new_col <- paste0(quo_column, "_adjusted")[2]

   mean_col <- paste0(quo_column, "_meanAdjusted")[2]

   data %>%
      mutate(!!new_col := (!!quo_column) + 1) %>%
      group_by(Species) %>%
      summarize(!!mean_col := mean(!!new_col))
}

my_function(iris, Petal.Length)

这会产生一个警告,说明参数“Petal.Length_adjusted”不是数字或逻辑,尽管mutate调用的输出给出了一个数字列。

如何引用此动态生成的列名以将其传递给更多dplyr函数?

1 个答案:

答案 0 :(得分:10)

quo_column quosure不同,new_colmean_col是字符串,因此我们使用sym将其转换为符号(来自{{ 1}})然后进行评估

rlang