在 R 上的 igraph 中查找大型数据集中的根顶点

2023-11-30

假设您有一个根据边列表创建的图,并且有数百个顶点。我想要做的是确定所有后续顶点都与之相关的初始顶点集(例如母亲或家谱)。

这是一个代表“冰岛”的数据集,即从冰川上脱落并漂浮在海上的大型平板状冰片。初始裂缝代表根节点。随后的顶点是对这些较小碎片(融化的岛屿)或已断裂碎片的重新观察(因此源顶点具有两个边的网络并继续形成两个新顶点)。

是否有一段代码或函数可以为我轻松完成此操作?如果我在绘图中添加标签,则无法阅读。我发现的大多数操作根节点的方法都涉及小样本数据集,您只需在图中任意命名事物,或使用顶点的实际名称。我的数据来自一个巨大的已建立的 CSV,具有超长的数字字符名称。这让事情变得困难。

我对编码也非常陌生,R 对我来说是一场噩梦。请温柔并使用简单的例子!如果您认为有帮助,我可以附上我的代码,我的所有数据都是从服务器中提取的,我不知道从您的角度来看是否会很清楚。

Thanks.


对于任何节点 n,您可以找到边的数量into节点使用neighbors(g, n, mode="in")。如果一个节点没有任何边进入它,那么它就是一个初始顶点。因此,您可以测试所有节点,了解有多少条边进入该节点,并选择答案为零的边。

这是一个简单的示例图:

library(igraph)
set.seed(2017)
g = erdos.renyi.game(12, 20, type="gnm", directed=TRUE)
plot(g)

Example Graph

现在我们可以找到根节点了。

which(sapply(sapply(V(g), 
    function(x) neighbors(g,x, mode="in")), length) == 0)
[1] 1 2

这表示节点 1 和 2 是源。

既然你说你是初学者,那我就简单解释一下。

function(x) neighbors(g,x, mode="in")是一个函数,它接受一个节点作为参数并使用neighbors返回具有从 y 到 x(x 的父级)的链接的节点 y 的列表。

sapply(V(g), function(x) neighbors(g,x, mode="in"))将该函数应用于图中的所有节点,从而给出每个节点的父节点列表。我们对没有父节点的节点感兴趣,因此我们希望该列表的长度为零的节点。因此,我们将长度应用于父母列表并检查哪些长度为零。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 R 上的 igraph 中查找大型数据集中的根顶点 的相关文章

随机推荐