首页 > 解决方案 > 计算一组分组节点之间的所有可能边

问题描述

我想计算一组给定的分组节点之间的所有可能的边。目前,我能够开发的唯一想法是作为分组交叉连接功能,出于性能和内存分配的原因,我想用 data.table 实现。我基本上想计算一个组内的所有潜在组合并遍历所有组。

对小型数据集使用 base R 和 dplyr 的经典方法如下所示:

library(dplyr)
IDs <- data.frame("Group" = c("A","B","A","A","B","B","A","B","B","B")
              ,"ID" = 1:10)
# note that I do not know the 

CrossJoin <- merge(IDs,IDs, by=NULL) %>%
  filter(Group.x == Group.y)

因此,我跨越了完整的 carthesian 产品,然后进行了过滤。这种方法的问题当然是如果 IDs 数据集变得更大,我们会遇到内存问题。

我知道提供相同结果的基本 data.table 功能:

library(data.table)

dtIDs <-as.data.table(IDs)
CrossJoinDT <- merge(dtIDs[, .(Group, ID)], dtIDs[, .(Group, ID)], by="Group", allow.cartesian = T)[ID.x != ID.y]

但是在更大的数据集上性能仍然很差。

结果应该与 in 相同,CrossJoinCrossJoinDT对于更大的数据集性能更高。(n=100000ID 中的条目)

谢谢你的帮助!

斯蒂芬

标签: rdata.tableigraph

解决方案


推荐阅读