Используя R 3.2.2 и dplyr 0.7.2, я пытаюсь понять, как эффективно использовать group_by
с полями, предоставленными как векторы символов.
Выбор прост, я могу выбрать поле с помощью строки, подобной этой
(function(field) {
mpg %>% dplyr::select(field)
})("cyl")
Несколько полей через несколько строк, как это
(function(...) {
mpg %>% dplyr::select(!!!quos(...))
})("cyl", "hwy")
и несколько полей через один вектор символов с длиной> 1, как это
(function(fields) {
mpg %>% dplyr::select(fields)
})(c("cyl", "hwy"))
С group_by
я действительно не могу найти способ сделать это для более чем одной строки, потому что, если мне удается получить вывод, он группируется по строке, которую я предоставляю.
Мне удалось сгруппировать по одной строке вот так
(function(field) {
mpg %>% group_by(!!field := .data[[field]]) %>% tally()
})("cyl")
Что уже довольно некрасиво.
Кто-нибудь знает, что мне нужно написать, чтобы я мог бежать
(function(field) {...})("cyl", "hwy")
а также
(function(field) {...})(c("cyl", "hwy"))
соответственно? Я пробовал всевозможные комбинации !!
, !!!
, UQ
, enquo
, quos
, unlist
и т.д ... и сохранял их в промежуточных переменных, потому что иногда кажется, что это имеет значение, но не может заставить его работать.