无需igraph:用data.table或Base R实现图数据的高效分组聚类
用data.table或Base R识别图的连通分量(替代igraph)
我有如下结构的图数据:
library(data.table) dt = data.table( n1 = c(1, 1, 2, 4, 6), n2 = c(2, 3, 3, 5, 3) )
输出的dt内容:
> dt n1 n2 1: 1 2 2: 1 3 3: 2 3 4: 4 5 5: 6 3
其中dt描述节点间的连接关系,我希望识别该结构中的聚类集合,得到如下结果:
output = data.table( node = 1:6, grp = c(1,1,1,2,2,1) )
输出的output内容:
> output node grp 1: 1 1 2: 2 1 3: 3 1 4: 4 2 5: 5 2 6: 6 1
我可以用igraph库实现这个需求:
library(igraph) g = graph_from_data_frame(dt) plot(g)
生成的图结构显示,节点1、2、3、6属于一个连通分量,节点4、5属于另一个连通分量。
运行clusters函数的结果:
> clusters(g)$membership 1 2 4 6 3 5 1 1 2 1 1 2
但我希望尽量减少第三方库的依赖,因此寻求使用data.table或Base R的高效操作,通过dt生成上述成员表output。我猜测这可能涉及dt的一系列自连接,但在多聚类的大规模数据上未能成功实现。
内容的提问来源于stack exchange,提问作者JDG
相关产品推荐
相关产品推荐

