假设您有一个您从边缘列表制作的图表,并且有几百个顶点。我要做的是确定所有后续的顶点集合(如母亲或家族树)。
这是一个代表“冰岛”的数据集,这些巨大的表格冰块从冰川中脱落并漂浮在海面上。最初的裂缝代表根节点。随后的顶点是重新观察这些较小的部分(融化的岛屿)或已经断开的部分(因此源顶点具有两个边缘的网络并继续形成两个新顶点)。
是否有一段代码或功能可以轻松地为我做到这一点?如果我在我的情节中添加标签,则无法阅读。我能够找到的大多数操作根节点的方法都涉及小样本数据集,您只需在图中任意命名,或使用顶点的实际名称。我的数据来自一个巨大的已建立的CSV,具有超长的数字字符名称。这很难。
我对编码也很陌生,R对我来说是个噩梦。请温柔,并使用简单的例子!如果你认为它有用,我可以附上我的代码,我的所有数据都是从服务器中提取的,而且我不知道从你的角度来看是否会非常清楚。
感谢。
答案 0 :(得分:1)
在此处输入代码如果图形包含自循环,则G5W的解决方案将失败。另一种方法:
library(igraph)
set.seed(2017)
g = erdos.renyi.game(12, 20, type="gnm", directed=TRUE)
rts <- V(g)[degree(g, mode=c("in"), loops = F) == 0] # find roots, that is, in-degree is zero
paste(c("Roots: ", rts), collapse=" ")
plot(g, layout=layout_with_sugiyama(g)$layout) # plot graph in layers
g2 <- simplify(g, remove.loops = T, remove.multiple = T) # reduce to simple graph without loops
stopifnot(max(clusters(g2, mode=c("strong"))$csize) == 1) # stop when cycles
E(g2)$weight <- -1 # shortest path is longest negative
dis <- (-distances(g2, mode="in") ) # matrix VxV of depth of layers, depth from top to bottom
lay = as.matrix(apply(dis, 1, max)) # maximum of distances in successors
as.matrix(apply(-distances(g2, mode="out"), 1, max)) # or reverse from bottom to top
plot(g, layout=layout_with_sugiyama(g, layer=lay)$layout)