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

在R语言中实现DataFrame两列分组并统计计数的方法

在R语言中对DataFrame实现分组计数统计

先还原你的示例DataFrame,方便测试:

df <- data.frame(
  ID = c("Buckinghamshire", "Cornwall and Isles of Scilly", "Devon", "Dunfermline", "Humberside", "Inner London", "Kent", "Kirkcaldy", "Lancashire", "Not known/missing"),
  lable = c(1,2,1,2,2,"X","X",1,1,2),
  col1 = c("A","B","A","C","C","A","A","C","B","C"),
  col2 = c("A","B","A","C","C","A","A","C","B","C"),
  stringsAsFactors = FALSE
)

你的需求是统计col1和col2中每个类别(A/B/C)在lable的1/2/X分组下的出现次数,最终输出指定的宽格式表格。

实现方法(用tidyverse工具链)

用dplyr做分组统计,tidyr做格式转换,逻辑清晰易读:

library(tidyverse)

df2 <- df %>%
  # 1. 将col1、col2转为长格式,拆分出name和group列
  pivot_longer(cols = starts_with("col"), 
               names_to = "name", 
               values_to = "group") %>%
  # 2. 按name和group分组,统计每个lable的出现次数
  count(name, group, lable) %>%
  # 3. 将lable转为列,计数作为对应列的值,缺失的计数补0
  pivot_wider(names_from = lable, 
              values_from = n, 
              values_fill = 0) %>%
  # 按name排序,与期望输出顺序匹配
  arrange(name)

用你的示例数据测试,输出结果结构与需求完全一致:

> df2
# A tibble: 6 × 5
  name  group     `1`   `2`     X
  <chr> <chr>  <int> <int> <int>
1 col1  A          2     0     2
2 col1  B          1     1     0
3 col1  C          1     3     0
4 col2  A          2     0     2
5 col2  B          1     1     0
6 col2  C          1     3     0

补充说明

  • 未安装tidyverse的话,先执行install.packages("tidyverse")完成安装
  • values_fill = 0用于填充无对应组合的计数,避免出现NA值
  • 若要用基础R实现,可结合table函数做格式转换,但代码会繁琐很多,tidyverse的方式更直观

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 00:05:21