You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在函数中使用dplyr::group_by实现多变量分组统计

多分组变量的统计计数函数实现

你现在的问题是想让countString函数支持传入多个分组变量,同时保留原变量列而不是合并成一列对吧?我来帮你调整一下代码,完美解决这个需求~

问题分析

你原来的函数用了enquo(),它只能处理单个变量,所以传入多个变量或者用paste()合并都会导致列被合并。要支持多个分组变量,我们需要用...(可变参数)配合enquos()来捕获多个变量。

解决方案代码

修改后的函数可以这样写:

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(...) {
  theTibble %>%
    group_by(!!! enquos(...)) %>%
    count(name = "nn")  # 指定计数列名为nn,匹配你期望的结果格式
}

使用示例

  • 单变量分组:
countString(animal)

输出会保留animal列和计数列nn。

  • 多变量分组(这就是你想要的效果):
countString(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

关键知识点说明

  • ...:用来接收任意数量的分组变量参数,让函数更灵活。
  • enquos(...):把传入的多个变量转换成带环境信息的变量引用(quosures),方便dplyr识别。
  • !!!:解引用运算符,把quosures列表展开成group_by()能识别的多个独立参数,这样就能保留每个分组变量的原始列了。

这样修改后,你的函数既支持单变量分组,也支持多变量分组,完全满足需求~

内容的提问来源于stack exchange,提问作者itsMeInMiami

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 09:46:43