dplyr如何按照多列名称进行分组?

3

我曾经可以使用字符串列名(“标准评估”)来进行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个回答

5

我们可以在dplyr版本 >= 1.0.0中使用acrossgroup_by

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接