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

如何统计R语言列表中重复data frame的数量?

统计列表中重复Data Frame的数量

给定一个包含多个Data Frame的列表(比如示例中的100个),我们需要高效统计其中完全相同的Data Frame的出现次数。直接两两比对(如100个对象需进行4950次比对)效率低下,以下是更高效的解决方案:

示例数据

df1 <- data.frame(A = c(1, 1, 0, 1),
                  B = c(0, 0, 1, 1),
                  C = c(1, 1, 1, 0),
                  D = c(1, NA, 0, NA))

df2 <- data.frame(A = c(1, 1, 0, 1),
                  B = c(0, 0, 1, 1),
                  C = c(1, 1, 1, 0),
                  D = c(1, NA, NA, 0))

df3 <- data.frame(A = c(1, 1, 0, 1),
                  B = c(0, 0, 1, 1),
                  C = c(1, 1, 1, 0),
                  D = c(NA, 1, NA, 0))

df4 <- data.frame(A = c(1, 1, 0, 1),
                  B = c(0, 0, 1, 1),
                  C = c(1, 1, 1, 0),
                  D = c(NA, 1, NA, 0))

list1 <- list(df1, df2, df3, df4)

方法一:Base R序列化法

通过序列化Data Frame生成唯一标识,再统计标识的出现频次:

# 为每个Data Frame生成唯一序列化字符串
df_unique_ids <- sapply(list1, function(df) {
  paste(serialize(df, NULL), collapse = "")
})

# 统计各标识的出现次数
duplicate_stats <- table(df_unique_ids)

# 筛选出重复(出现次数>1)的结果
duplicate_stats[duplicate_stats > 1]

运行后会输出2,对应示例中df3和df4的重复次数。

方法二:Digest哈希法

使用digest包生成Data Frame的哈希值,哈希值相同则Data Frame完全一致:

library(digest)

# 生成每个Data Frame的MD5哈希值
df_hashes <- sapply(list1, digest)

# 统计哈希值的出现频次
hash_stats <- table(df_hashes)

# 查看重复结果
hash_stats[hash_stats > 1]

此方法更简洁,且对大型Data Frame的处理效率更高。

注意事项

  • 这里的“完全相同”包含列顺序、列名、每个位置的数值(包括NA的位置),示例中NA位置不同的df1、df2会被判定为不同的Data Frame。
  • 两种方法均只需遍历列表一次,远快于两两比对的方式,适合处理包含100个甚至更多Data Frame的列表。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 11:36:07