如何在函数中使用dplyr :: group_by

itsMeInMiami

我想创建一个函数,该函数将生成一个具有基于一个或多个分组变量的计数的表。我发现这篇文章在函数中使用dplyr group_by,如果我将单个变量名传递给函数,该函数将起作用

library(dplyr)
l <- c("a", "b", "c", "e", "f", "g")
animal <- c("dog", "cat", "dog", "dog", "cat", "fish")
sex <- c("m", "f", "f", "m", "f", "unknown")
n <- rep(1, length(animal))
theTibble <- tibble(l, animal, sex, n)


countString <- function(things) {
  theTibble %>% group_by(!! enquo(things)) %>% count()
}

countString(animal)
countString(sex)

效果很好,但我不知道如何将两个变量传递给函数。这类作品:

countString(paste(animal, sex))

它给了我正确的计数,但是返回的表将动物和性别变量折叠为一个变量。

# A tibble: 4 x 2
# Groups:   paste(animal, sex) [4]
  `paste(animal, sex)`    nn
  <chr>                <int>
1 cat f                    2
2 dog f                    1
3 dog m                    2
4 fish unknown             1

将两个以逗号分隔的单词传递给函数的语法是什么?我想得到这个结果:

# A tibble: 4 x 3
# Groups:   animal, sex [4]
  animal sex        nn
  <chr>  <chr>   <int>
1 cat    f           2
2 dog    f           1
3 dog    m           2
4 fish   unknown     1
杰克

您可以使用group_by_at和列索引,例如:

countString <- function(things) {
  index <- which(colnames(theTibble) %in% things)
  theTibble %>% 
       group_by_at(index) %>% 
       count()
}

countString(c("animal", "sex"))

## A tibble: 4 x 3
## Groups:   animal, sex [4]
#  animal sex        nn
#  <chr>  <chr>   <int>
#1 cat    f           2
#2 dog    f           1
#3 dog    m           2
#4 fish   unknown     1

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章