2017-03-19 9 views
0

大規模なネットワーク(20kノード)で頂点属性を設定したい。簡単にするために、ここでedgelistのサンプルです:大規模ネットワークのデータフレームから頂点属性を設定する

library(igraph) 
el <- matrix(c(1, 2,1,3,1,4,2,3,2,5,3,6,3,7,3,8,3,9,12,13,13,14), nc = 2, byrow = TRUE) 
el[,1] = as.character(el[,1]) 
el[,2] = as.character(el[,2]) 
g = graph.data.frame(el,directed=FALSE) 

はまた、私はこのようになり、データフレームを持っている:

ID = c(1,2,3,4,5,6,7,8,9,NA,NA) 
Attr1 = c(12,13,14,NA,14,13,16,NA,24,13,15) 
Attr2 = c(NA, "bb", "cc","ff","dd",NA,"hh",NA,"kk","dd","cc") 
Attributes = data.frame(ID, Attr1, Attr2) 
rm(Attr1) 
rm(Attr2) 
rm(ID)  

私は頂点属性などの属性データフレームからのデータを使用したいです。この例のように、データの一部が欠落しています(たとえば、ネットワーク内の一部の頂点が属性データフレームに表示されません)。データフレームの行数は、頂点の数と一致します。 マッチングのIDを使用して属性を追加したいとします(エッジグリッドのIDと属性データフレームはほとんど同じですが、一部のIDはエッジグリストまたはデータフレームにのみあります)。

答えて

2

set_vertex_attrは名前と値がデータフレーム

for(cn in colnames(Attributes)) { 
    g = set_vertex_attr(g, cn, 1:nrow(Attributes), value=Attributes[,cn]) 
} 
+0

このソリューションは機能しますが、作成したデータフレームではなく、値を参照しています。私は私の質問を更新します。ありがとうございました! – PCK1992

+0

@ PCK1992 data.frameにあるものを使用するように更新されました。 – G5W

+0

私はこのソリューションを試しましたが、コードを正しく使用すれば完全にはわかりません。私は再び自分の問題を特定しようとしました。このソリューションでは、edgelistとAttributesの両方のデータフレームのIDを使用して属性を照合しますか? – PCK1992

1

から取られているように属性を設定するための迅速な方法があり、この

更新答えを行います、あなたが考えることができます。

V(g)$ID <- c(1,2,3,4,5,6,7,8,9,NA,NA) 
V(g)$Attr1 <- c(12,13,14,NA,14,13,16,NA,24,13,15) 
V(g)$Attr2 <- c(NA, "bb", "cc","ff","dd",NA,"hh",NA,"kk","dd","cc") 
関連する問題