如何使用带有动态列名的 dplyr 中的“摘要”?

Van*_*nce 3 r dplyr summarize

我正在使用summarizeR 中 dplyr 包中的函数从表中总结组均值。我想使用存储在另一个变量中的列名字符串动态执行此操作。

以下是“正常”方式,当然可以工作:

myTibble <- group_by( iris, Species)
summarise( myTibble, avg = mean( Sepal.Length))

# A tibble: 3 x 2
  Species     avg
  <fct>      <dbl>
1 setosa      5.01
2 versicolor  5.94
3 virginica   6.59

Run Code Online (Sandbox Code Playgroud)

但是,我想做这样的事情:

myTibble <- group_by( iris, Species)
colOfInterest <- "Sepal.Length"
summarise( myTibble, avg = mean( colOfInterest))
Run Code Online (Sandbox Code Playgroud)

我读过与dplyr编程页,我已经尝试了一堆的组合quoenquo!!.dots=(...),等,但我还没有想出这样做还以正确的方式。

我也知道这个答案,但是,1) 当我使用标准评估函数时standardise_,R 告诉我它已经贬值了,2) 这个答案看起来一点也不优雅。那么,有没有一种好的,简单的方法来做到这一点?

谢谢!

G. *_*eck 6

1)!!sym(...)像这样使用:

colOfInterest <- "Sepal.Length"
iris %>% 
  group_by(Species) %>%
  summarize(avg = mean(!!sym(colOfInterest))) %>%
  ungroup
Run Code Online (Sandbox Code Playgroud)

给予:

# A tibble: 3 x 2
  Species      avg
  <fct>      <dbl>
1 setosa      5.01
2 versicolor  5.94
3 virginica   6.59
Run Code Online (Sandbox Code Playgroud)

2)第二种方法是:

colOfInterest <- "Sepal.Length"
iris %>% 
  group_by(Species) %>%
  summarize(avg = mean(.data[[colOfInterest]])) %>%
  ungroup
Run Code Online (Sandbox Code Playgroud)

当然,这在基础 R 中是直接的:

aggregate(list(avg = iris[[colOfInterest]]), iris["Species"], mean)
Run Code Online (Sandbox Code Playgroud)