web-dev-qa-db-ja.com

グラフから頂点IDを取得する方法

以下を考慮してください

_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」で識別された3番目の頂点にアクセスしたいとします。次のようなもので頂点にアクセスする方法はありますか

_V(g)$id == "A"
_

そして、とにかくidからnameを取得することはありますか?つまり、私が実行した場合

_which(V(g)$name == "Peter")
_

_3_を取得します。代わりにAを取得する方法は?

16
CptNemo

まず、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

例のidからnameにアクセスしたい場合は、そのベクトルにインデックスを付けて結果を得ることができます。

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

答えは役に立つかもしれません。私の推奨事項は、@ Gabor Csardiの場合と同じで、名前はid、名前は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"
0
rykhan