以下を考慮してください
_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
を取得する方法は?
まず、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) ]
答えは役に立つかもしれません。私の推奨事項は、@ 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"