dplyr group_by вектор имен столбцов?

#r #dplyr

#r #dplyr

Вопрос:

Раньше я мог group_by_ использовать строку имени столбца («стандартная оценка»), но теперь она устарела.

 > data(mtcars)
> mtcars %>% group_by_('mpg') %>% tally() %>% head(2)
# A tibble: 2 x 2
    mpg     n
  <dbl> <int>
1  10.4     2
2  13.3     1
Warning message:
`group_by_()` is deprecated as of dplyr 0.7.0.
Please use `group_by()` instead.
See vignette('programming') for more help
  

Кроме того, похоже, что группировка по нескольким столбцам никогда не работала с group_by_?

 > mtcars %>% group_by_(c('mpg', 'cyl')) %>% tally() %>% head(2)
# A tibble: 2 x 2
    mpg     n
  <dbl> <int>
1  10.4     2
2  13.3     1
  

Как мне получить соответствующие подсчеты, используя вектор имен столбцов?

Например, результат, который выглядит как:

 > mtcars %>% group_by(mpg, cyl) %>% tally() %>% head(2)
# A tibble: 2 x 3
# Groups:   mpg [2]
    mpg   cyl     n
  <dbl> <dbl> <int>
1  10.4     8     2
2  13.3     8     1
  

но использует c('mpg', 'cyl') ?

РЕДАКТИРОВАТЬ: используя dplyr 1.0.0.

Ответ №1:

Мы можем использовать group_by с across из dplyr версии> = 1.0.0

 library(dplyr)
mtcars %>% 
     group_by(across(all_of(c('mpg', 'cyl')))) %>% 
     tally() %>%
     head(2)
# A tibble: 2 x 3
# Groups:   mpg [2]
#    mpg   cyl     n
#  <dbl> <dbl> <int>
#1  10.4     8     2
#2  13.3     8     1
  

В более старых версиях используйте group_by_at

 mtcars %>%
   group_by_at(c('mpg', 'cyl')) %>%
   tally() %>%
   head(2)
# A tibble: 2 x 3
# Groups:   mpg [2]
#    mpg   cyl     n
#  <dbl> <dbl> <int>
#1  10.4     8     2
#2  13.3     8     1