gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 09:35:03 24 4
gpt4 key购买 nike

我想创建一个函数,该函数将生成一个表,该表具有基于一个或多个分组变量的计数。我找到了这个帖子 Using dplyr group_by in a function如果我将函数传递给单个变量名,这会起作用

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

关于r - 如何在函数中使用 dplyr::group_by,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50489537/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com