次の操作を行うことができ、リスト(私はいくつかの偽のデータを生成する)に隣接行列を抽出するために:私たちは、ノードの要因を作る場合
set.seed(42)
df <- data.frame(beginEdge = sample(1:10, 10, replace = TRUE),
endEdge = sample(1:10, 10, replace=TRUE),
pathNum = rep(c(1,2), each=5))
df
beginEdge endEdge pathNum
1 10 5 1
2 10 8 1
3 3 10 1
4 9 3 1
5 7 5 1
6 6 10 2
7 8 10 2
8 2 2 2
9 7 5 2
10 8 6 2
paths <- unique(df$pathNum) # get the paths to iterate through
、およびすべてのノードへの因子のレベルを設定します集団内では、ネットワーク内の集団の隣接行列が計算されます。ここでネットワークは10人の俳優であると仮定しています。観測データに作業するすべてのノードが含まれている場合は、レベルをunique(c(df$beginEdge,df$endEdge))
に設定するか、好きなノードのセットを設定します。
df$beginEdge <- factor(df$beginEdge, levels=1:10)
df$endEdge <- factor(df$endEdge, levels=1:10)
現在のパスのリストを越えて行くと、リストとしてそれらを保存する行列を作成します。
list.of.adj.mats <- lapply(paths, function(i){
matrix(as.numeric((
table(df$beginEdge[df$pathNum==i],
df$endEdge[df$pathNum==i])+
table(df$endEdge[df$pathNum==i],
df$beginEdge[df$pathNum==i]))>0),
nrow=length(levels(df$beginEdge)))})
list.of.adj.mats
[[1]]
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 0 0 0 0 0 0 0 0 0 0
[2,] 0 0 0 0 0 0 0 0 0 0
[3,] 0 0 0 0 0 0 0 0 1 1
[4,] 0 0 0 0 0 0 0 0 0 0
[5,] 0 0 0 0 0 0 1 0 0 1
[6,] 0 0 0 0 0 0 0 0 0 0
[7,] 0 0 0 0 1 0 0 0 0 0
[8,] 0 0 0 0 0 0 0 0 0 1
[9,] 0 0 1 0 0 0 0 0 0 0
[10,] 0 0 1 0 1 0 0 1 0 0
[[2]]
[,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10]
[1,] 0 0 0 0 0 0 0 0 0 0
[2,] 0 1 0 0 0 0 0 0 0 0
[3,] 0 0 0 0 0 0 0 0 0 0
[4,] 0 0 0 0 0 0 0 0 0 0
[5,] 0 0 0 0 0 0 1 0 0 0
[6,] 0 0 0 0 0 0 0 1 0 1
[7,] 0 0 0 0 1 0 0 0 0 0
[8,] 0 0 0 0 0 1 0 0 0 1
[9,] 0 0 0 0 0 0 0 0 0 0
[10,] 0 0 0 0 0 1 0 1 0 0
は、返信用にありがとうございました。あなたの答えが与える隣接行列を見るだけで、対角に沿って対称でなければならないと思います。換言すれば、エントリ[i、j] =エントリ[j、i]。これはあなたの答えに当てはまるようではありませんか? – user7512228
あなたが与えた例は、無向の隣接行列を計算することですので、対称である必要はありません。生成した行列は、パスを表すために無向の隣接行列に必要なすべての情報をエンコードします。しかし、必要な場合に対称行列を生成するようにコードを編集しましたが(それはちょっと面倒ですが)。 – gfgm
ありがとう、私は対称隣接行列が必要だと言わねばならない。 – user7512228