0

いくつかの助けを借りて、エッジリスト、別名隣接リスト隣接行列に変換する方法を見つけました。 多数のエッジリストに対してこれを自動化し、結果の隣接行列をリストに入れる方法を学びたいです。

plyr がこれを行うための最良の方法だと思いますが、ループで行う方法を教えてほしい場合は、それにも感謝します。興味深いことに、データはさまざまな学校のソーシャル ネットワークを表しています。

ここに私がこれまでに持っているものがあります:

     # extract one school edgelist from the dataframe
aSchool <- myDF[which(myDF$school==1), c("school", "id", "x1","x2","x3","x4","x5","x6","x7","x8","x9","x10")]

     # figure out unique ids
edgeColumns <- c("x1","x2","x3","x4","x5","x6","x7","x8","x9","x10")
ids <- unique(unlist(aSchool[edgeColumns]))
ids <- ids[!is.na(ids)]
     # make an empty matrix
m <- matrix(0,nrow=length(ids),ncol=length(ids))
rownames(m) <- colnames(m) <- as.character(ids)
     # fill in the matrix
for(col in edgeColumns){
       theseEdges <- aSchool[c("id",col)]
       theseEdges <- na.omit(theseEdges)
       theseEdges <- apply(theseEdges,1,as.character)
       theseEdges <- t(theseEdges)
       m[theseEdges] <- m[theseEdges] + 1
}
for(i in 1:nrow(m)) m[i,i] <- 0
4

2 に答える 2

2

SNA パッケージas.edgelist.sna()およびas.sociomatrix.sna()関数を確認してください。

特に、as.sociomatrix.sna()ここでは完璧な解決策のように思えます: これは、単一のステップで (頂点名などの属性を失うことなく) エッジリストを隣接行列に変換するように設計されています。への呼び出しですべてをまとめると、lapply()さらに別の (おそらく労働集約的ではない?) ソリューションを手に入れたと思います。

より表現力豊かな回答をご覧になりたい場合は、より完全なサンプルデータを提供するか、正確に何が含まれているかをより明確に説明することが役立つと思いますmyDF

また、私はそうするほどの評判はありませんが、ネットワーク分析に関するものであることを示すために、この投稿にいくつかのタグを追加します.

于 2011-02-25T03:43:28.200 に答える