2016-04-01 5 views
1

snaパッケージでmrqapテストを実行するために隣接配列を取得するにはどうすればよいですか? このように、私は、属性を持つエッジリストに、加重複数のネットワーク(二無向と有向1)を有する:snaパッケージでmrqapテストを実行するための隣接配列

source target terr type weight 
    1010 1007  1  3   1 
    1011 1303  1  2   1 
    1014 1048  1  4   2 
    1014 1138  1  4   3 

Iは、アレイ形式におけるノードの同じ数、このような何か(といくつかの行列を必要としかし)adyacency行列形式で:私が試した

type 2 
source target weight 
    1010 1007  0 
    1011 1303  1 
    1014 1048  0 
    1014 1138  0 
type 3 
source target weight 
    1010 1007  1 
    1011 1303  0 
    1014 1048  0 
    1014 1138  0 
type 4 
source target weight 
    1010 1007  0 
    1011 1303  0 
    1014 1048  2 
    1014 1138  3 

一つのスクリプト:

el=read.csv("S_EDGES.csv", header = TRUE, sep = ",") # edgelist 
Nodos=read.csv("S_NODES.csv", header = TRUE, sep = ",") 
el$type[el$type==2] <- 1 # un solo vínculo de infraestructura 

library(igraph) 
G=graph.data.frame(el, Nodos, directed=F) 

subv = (Nodos$id (Nodos$terr_name=="ART") # this fail and then also "neighverts" and "g3" 
SG = decompose.graph(G,mode="weak") # because different territories are in fact different networks 
neighverts = unique(unlist(sapply(SG,FUN=function(s){if(any(V(s)$name %in% subv)) V(s)$name else NULL}))) 
g3 = induced.subgraph(graph=G,vids=neighverts) 

# or: 
AM=get.adjacency(G, type=c("both"), attr=NULL, names=TRUE, sparse=FALSE) # doesn't distinguish the types of links in different matrices 
+0

ありがとう@ user20650あなたのご提案に、私は質問を改善しました。私は同じ構造(各タイプに関係なく、同じ数のノード)を維持しながら、各マトリックスのリンクのタイプを区別する必要があります(マルチマップでした)。 –

+0

こんにちは、@セバスチャン、アップデートありがとう。私はあなたがやろうとしていることを知らない、申し訳ありません。しかし、私は誰かが助けてくれると思っています。あなたの例を再現可能にすることを試みる必要があります。例として、 'el'と' Nodes'のいくつかの行を例として定義します。その例では、出力隣接行列がどのように見えるかを示しています。ありがとう – user20650

+0

もう一度@ user20650に感謝します。私は最初のテーブル(ソースターゲットterr型の重み)の "エル"の例を与える、ベースノードは今重要ではない –

答えて

0

私は、これは古い問題であることを理解、しかし、ケースであなたは、STIあなたの質問で要求された分解を実行したいでしょう:

library(dplyr) 

# your example rows 
d <- read.table(header = TRUE, 
       text = "source target terr type weight 
    1010 1007  1  3   1 
    1011 1303  1  2   1 
    1014 1048  1  4   2 
    1014 1138  1  4   3") %>% 
    select(-terr) 

# the transformation 
lapply(unique(d$type), function(x) { 
    mutate(d, weight = ifelse(type == x, weight, 0)) %>% 
    select(-type) 
}) %>% 
    setNames(unique(d$type)) 

コードはあなたが尋ね返す:上そこから

$`3` 
    source target weight 
1 1010 1007  1 
2 1011 1303  0 
3 1014 1048  0 
4 1014 1138  0 

$`2` 
    source target weight 
1 1010 1007  0 
2 1011 1303  1 
3 1014 1048  0 
4 1014 1138  0 

$`4` 
    source target weight 
1 1010 1007  0 
2 1011 1303  0 
3 1014 1048  2 
4 1014 1138  3 

、あなたのように、リストの各要素を変換することができるはずです希望(グラフに変換し、エッジをモデル化するなど)。

+0

あなたの提案をありがとう。私は別の方法でそれを解決し、それぞれのタイプを別のエッジリストに変えました。 –

+0

十分な公正。また、これらの種類のデータ問題を扱う 'purrr'を見てみたいかもしれません。私はまだそれを使っていませんが、すぐにそうするつもりです。導入については、[これらのスライド](https://speakerdeck.com/jennybc/data-rectangling)を参照してください。 –

+0

ありがとうございました。今私は自分の論文を持っていますが、私は後で見ていきます。 –

関連する問題