【问题标题】:dplyr group_by vector of column names?dplyr group_by 列名向量?
【发布时间】:2020-10-22 18:08:25
【问题描述】:

我以前可以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。

【问题讨论】:

    标签: r dplyr


    【解决方案1】:

    我们可以使用group_byacrossdplyr 版本>= 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
    

    【讨论】:

      猜你喜欢
      • 2018-02-15
      • 1970-01-01
      • 1970-01-01
      • 2016-12-03
      • 1970-01-01
      • 2019-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多