r - dplyr group_by 列名向量?
问题描述
我曾经能够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。
解决方案
我们可以使用group_by
with across
from dplyr
version >= 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
推荐阅读
- sql - 对多个子查询表使用 count(*) 函数
- ruby - 用递增的数字插入一个字符串
- java - 使用 Maven Resolver Provider 以编程方式获取有效的 POM
- hadoop - Hadoop 中的 part-r-00000 和 part-m-00000 文件有什么区别?
- python-3.x - 我想用 2 个单独的字典键绘制散点图
- aix - 希望进入 AIX 以进行 SYSV 风格的 unix 内核编程需要建议
- google-app-engine - 为什么我看到 Deferred 中的 Deadline 超出了 HTTPException?
- bash - 仅对命令发球,而不是标准输出
- typescript - 调用 wave-crypto 模块以创建种子和地址时出错
- r - knitr::opts_chunk$set(message=FALSE) 不起作用