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

如何在一次操作中使用count()函数统计多列频数

需求说明

我平时用dplyr的count()函数统计单列频数,示例代码如下:

library(dplyr)

mtcars %>% 
  count(cyl) 
mtcars %>% 
  count(am) 
mtcars %>% 
  count(gear) 

现在想一次性完成cyl、am、gear这三列的独立频数统计,注意不是联合统计(比如count(cyl, am, gear)这种组合统计方式)。我自己已有可行实现,但想知道更简洁的写法。

我当前的实现代码:

library(dplyr)
library(tidyr)

mtcars %>% 
  count(am) %>% 
bind_rows(mtcars %>% 
            count(cyl)) %>% 
  bind_rows(mtcars %>% 
              count(gear)) %>% 
pivot_longer(-n, 
             values_drop_na = TRUE) %>% 
  unite("variable", c("name", "value")) %>% 
  relocate(variable, n)

运行结果:

variable     n
  <chr>    <int>
1 am_0        19
2 am_1        13
3 cyl_4       11
4 cyl_6        7
5 cyl_8       14
6 gear_3      15
7 gear_4      12
8 gear_5       5
简洁实现方案

可以通过先转长格式再统一统计的方式,大幅简化代码:

library(dplyr)
library(tidyr)

mtcars %>%
  select(cyl, am, gear) %>%
  pivot_longer(everything(), names_to = "var", values_to = "val") %>%
  count(var, val) %>%
  unite(variable, var, val, sep = "_") %>%
  relocate(variable, n)

运行结果和原实现完全一致。

逻辑说明

  1. select(cyl, am, gear):筛选出需要统计的目标列,排除无关列
  2. pivot_longer(...):将多列转为长格式,把原列名存入var,对应值存入val
  3. count(var, val):按列名和值分组统计,一步完成所有目标列的独立频数统计
  4. unite(...):合并列名与值,生成要求的variable格式
  5. relocate(...):调整列顺序,匹配原输出结构

这种写法无需多次重复调用count和bind_rows,代码更紧凑,逻辑更连贯。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 05:12:29