передача имени столбца как переменной в dplyr

Вариантов этого вопроса задавали много, читал про NSE. До сих пор я не могу этого понять.

Это легко:

library(dplyr)
data(cars)

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

Теперь я хочу использовать переменную x, чтобы передать столбец dist для обозначения

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))

Это тоже не работает.

Я в основном шатаюсь, не зная, как заставить эту работу работать или почему она терпит неудачу.


person juwi    schedule 25.05.2017    source источник


Ответы (1)


person    schedule
comment
Спасибо! Моя проблема в том, что я делал что-то подобное cars %>% group_by(speed) %>% summarise_(d = ~quantile(dist, c(0.95), na.rm =T)[1]) У вас тоже есть решение для этого? - person juwi; 25.05.2017
comment
Я обычно сначала определяю функцию с аргументом, например quantiles <- function(x) quantile(x, .95, na.rm=T). Таким образом, summarise_each может работать соответственно: cars %>% group_by(speed) %>% summarise_each_(funs(quantiles), vars(matches("dist"))) - person Adam Quek; 25.05.2017