如何从图中返回顶点ID

问题描述 投票:16回答:2

请考虑以下事项

library(igraph)
id <- c("1","2","A","B")
name <- c("02 653245","03 4542342","Peter","Mary")
category <- c("digit","digit","char","char")
from <- c("1","1","2","A","A","B")
to <- c("2","A","A","B","1","2")

nodes <- cbind(id,name,category)
edges <- cbind(from,to)

g <- graph.data.frame(edges, directed=TRUE, vertices=nodes)

现在我想使用我用来从数据框id <- c("1","2","A","B")创建图形的ID来访问图形的特定顶点。

假设我想访问第三个顶点 - 最初用“A”标识。有没有办法用类似的东西访问顶点

V(g)$id == "A"

无论如何从id获得name?也就是说,如果我跑

which(V(g)$name == "Peter")

我得到3。如何获得A呢?

r igraph
2个回答
24
投票

首先,igraph使用顶点属性name作为顶点的符号id。我建议你将id添加为name并使用其他名称作为其他属性,例如realname

但是,如果使用符号名称,通常不需要知道数字ID,因为所有函数也接受(嗯,它们应该)符号id。例如。如果你想要顶点Peter的程度,你可以说degree(g, "Peter")

如果你真的想要数字id,你可以做以下事情:

as.numeric(V(g)["Peter"])
# [1] 3
match("Peter", V(g)$name)
# [1] 3

如果你想在你的例子中从idname,你可以用结果索引该向量:

id[ match("Peter", V(g)$name) ]

0
投票

答案可能有用。我的建议与@Gabor Csardi一样,id为name,名称为real_name。

library(igraph)
name <- c("1","2","A","B")
real_name <- c("02 653245","03 4542342","Peter","Mary")
category <- c("digit","digit","char","char")
from <- c("1","1","2","A","A","B")
to <- c("2","A","A","B","1","2")

nodes <- cbind(name,real_name,category)
edges <- cbind(from,to)

g <- graph.data.frame(edges, directed=TRUE, vertices=nodes)

list.vertex.attributes(g)
#Output: [1] "name"      "real_name" "category"
which(V(g)$real_name == "Peter")
#Output: [1] 3
V(g)$name[which(V(g)$real_name == "Peter")]
#Output: [1] "A"
© www.soinside.com 2019 - 2024. All rights reserved.