r - 如何避免省略号......在dplyr?
问题描述
我想创建一个带有分组参数的函数。可以是单个或多个变量。我希望它看起来像这样:
wanted <- function(data, groups, other_params){
data %>% group_by( {{groups}} ) %>% count()
}
这仅在给出单个组时有效,但在有多个组时中断。我知道可以将以下内容与省略号一起使用...
(但我想要语法groups = something
):
not_wanted <- function(data, ..., other_params){
data %>% group_by( ... ) %>% count()
}
这是整个代码:
library(dplyr)
library(magrittr)
iris$group2 <- rep(1:5, 30)
wanted <- function(data, groups, other_params){
data %>% group_by( {{groups}} ) %>% count()
}
not_wanted <- function(data, ..., other_params){
data %>% group_by( ... ) %>% count()
}
# works
wanted(iris, groups = Species )
not_wanted(iris, Species, group2)
# doesn't work
wanted(iris, groups = vars(Species, group2) )
wanted(iris, groups = c(Species, group2) )
wanted(iris, groups = vars("Species", "group2") )
# Error: Column `vars(Species, group2)` must be length 150 (the number of rows) or one, not 2
解决方案
你们太复杂了,这很好用:
library(tidyverse)
wanted <- function(data, groups){
data %>% count(!!!groups)
}
mtcars %>% wanted(groups = vars(mpg,disp,hp))
# A tibble: 31 x 4
mpg disp hp n
<dbl> <dbl> <dbl> <int>
1 10.4 460 215 1
2 10.4 472 205 1
3 13.3 350 245 1
4 14.3 360 245 1
5 14.7 440 230 1
6 15 301 335 1
7 15.2 276. 180 1
8 15.2 304 150 1
9 15.5 318 150 1
10 15.8 351 264 1
# … with 21 more rows
推荐阅读
- javascript - Sonarqube 笑话覆盖率报告在预期的 XML 格式上失败
- javascript - 在 React JS 中的 2 个表对象之间切换
- python - 使用过去结果的矢量化循环
- javascript - 使用 Hidden Referrer href.li 更改 Wordpress 中的所有外部链接
- encryption - 我如何判断我的 BLE 通信是否使用非对称加密,如果加密的话?(BLE 5.x)
- sql - oracle sql中等效的Excel COUNTIF函数
- nginx - nginx:读取 njs 子请求中的响应标头
- html - 在里面标记 css 样式声明标签
- c# - 为什么在获取 Users.ToListAsync() 不为空时会出现 SqlNullException
- python - 根据 Pandas 数据框中两列的映射获取值