在 dplyr 中将列名作为变量传递

passing column name as variable in dplyr

这个问题的变体已经被问了很多,我也阅读了有关 NSE 的内容。 我还是想不通。

这很简单:

library(dplyr)
data(cars)

cars %>%
  group_by(speed) %>%
  summarise(d = mean(dist))

现在我想使用变量 x 将 dist 列传递给 mean

x <- "dist"

当然这不行:

cars %>%
  group_by(speed) %>%
  summarise(d = mean(x))

所以我使用 SE 版本的总结:

cars %>%
  group_by(speed) %>%
  summarise_(d = mean(x))

好的,不行,所以我也必须添加 ~

cars %>%
  group_by(speed) %>%
  summarise_(d = ~mean(x))

仍然无效,但如果使用 dist 而不是 x:

cars %>%
  group_by(speed) %>%
  summarise_(d = ~mean(dist))

这有效,但不使用 x。

cars %>%
  group_by(speed) %>%
  summarise_(d = ~mean(~x))

这也不行。

我基本上是在胡闹,不知道如何使它工作,也不知道它为什么会失败。

cars %>%
    group_by(speed) %>%
    summarise_each_(funs(mean), vars(matches(x)))