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

如何比较并统计R数据框多列中唯一值组合的出现次数?

统计数据框中指定列唯一值组合的出现次数

你需要统计数据框中col1、col2、col3三列的唯一值组合出现次数,生成包含计数列的新数据框。

示例数据

df <- data.frame( col1 = c(1,2,3,4,1,2,3,4,1),
                  col2 = c(5,6,7,8,5,6,7,8,5),
                  col3 = c(9,10,11,12,9,10,11,13,9))

目标结果

df2 <- data.frame( col1 = c(1,2,3,4,4),
                   col2 = c(5,6,7,8,8),
                   col3 = c(9,10,11,12,13),
                   count = c(3,2,2,1,1))

原代码问题分析

你之前的代码存在两个核心问题:

  • 先用distinct()去重,直接丢失了重复组合的计数信息,后续统计的是去重后分组的数量,而非原数据中组合的真实出现次数。
  • 仅按col3分组,没有以三列的完整组合作为分组依据,无法准确统计目标组合的出现次数。

正确解决方法

方法1:使用dplyr(推荐)

直接按三列的组合分组,统计每组的行数即可:

library(dplyr)

df2 <- df %>%
  group_by(col1, col2, col3) %>%
  summarize(count = n(), .groups = "drop")
  • group_by(col1, col2, col3):以三列的唯一组合作为分组依据
  • summarize(count = n()):统计每组的行数,即对应组合的出现次数
  • .groups = "drop":取消分组状态,返回普通数据框,避免后续操作受分组干扰

运行后结果与目标df2完全一致。

方法2:使用base R

如果不想加载dplyr包,可通过以下两种方式实现:

# 方式1:用aggregate函数
df2 <- aggregate(. ~ col1 + col2 + col3, data = df, FUN = length)
names(df2)[4] <- "count"

# 方式2:用table转换为数据框
tab <- table(df$col1, df$col2, df$col3)
df2 <- as.data.frame(tab, responseName = "count")
names(df2)[1:3] <- c("col1", "col2", "col3")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 17:55:27