Вы можете использовать функцию group_by_
для примера в вашем вопросе:
library(dplyr)
x <- data.frame(group1 = letters[1:4], group2 = LETTERS[1:4], value = 1:4)
select.colums <- c("group1", "group2")
x %>% group_by_(select.colums[2]) %>% summarize(avg = mean(value))
# A tibble: 4 x 2
# group2 avg
# <fct> <dbl>
# 1 A 1
# 2 B 2
# 3 C 3
# 4 D 4
Функции семейства *_
в dplyr также могут предложить более общее решение, которое вам нужно, хотя документация по dplyrговорит, что они устарели (?group_by_
) и могут исчезнуть в какой-то момент.Выражение, аналогичное приведенному выше решению с использованием синтаксиса вычисления tidy, выглядит следующим образом:
x %>% group_by(!!sym(select.colums[2])) %>% summarize(avg = mean(value))
И для нескольких столбцов:
x %>% group_by(!!!syms(select.colums)) %>% summarize(avg = mean(value))
Это создает символ из строки, который оценивается dplyr.