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

如何在R语言列表中找出相同的dataframe元素?

在R语言中找出列表中相同的DataFrame元素

示例数据

List1 <- list(A=data.frame(id=c("LA","WE","SE"),num=c(1,3,2)),
              B=data.frame(id=c("PO","TD","WW"),num=c(8,1,4)),
              C=data.frame(id=c("PO","TD","WW"),num=c(8,1,4)),
              D=data.frame(id=c("SS","FW","MW"),num=c(2,5,1)),
              E=data.frame(id=c("LA","WE","SE"),num=c(1,3,2)),
              G=data.frame(id=c("LA","WE","SE"),num=c(1,3,2)))

需求说明

将列表中完全相同的DataFrame归为一组,输出它们的名称,期望结果如下:

List2 <- list(c("A","E","G"),c("B","C")) 
# 即A、E、G完全相同,B和C完全相同

简便实现方法

方法1:Base R + digest包

通过生成每个DataFrame的哈希值判断一致性,再按哈希值分组:

# 首次使用需安装digest包
# install.packages("digest")
library(digest)

# 为每个列表元素生成唯一哈希标识
hash_ids <- sapply(List1, digest)

# 按哈希值分组,提取对应的列表名称
result <- split(names(List1), hash_ids)

# 过滤仅含单个元素的组(若无需保留独有的元素)
result <- result[sapply(result, length) > 1]

方法2:Tidyverse 语法(dplyr + purrr)

适合熟悉tidyverse生态的用户,通过数据框分组实现:

library(tidyverse)

result <- List1 %>%
  # 将列表转换为包含名称和DataFrame的 tibble
  imap_dfr(~ tibble(name = .y, data = list(.x))) %>%
  # 按DataFrame内容分组
  group_by(data) %>%
  # 只保留元素数量大于1的组
  filter(n() > 1) %>%
  # 合并每组的名称为列表
  summarise(group_names = list(name)) %>%
  # 提取最终的分组列表
  pull(group_names)

以上两种方法都能快速得到符合需求的分组结果,其中digest方式在处理大型列表时效率更优。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 23:59:57