2016-03-22 3 views
0

プロジェクトで分割したネットワークマトリックスのリストを作成したいと思います。私のデータはこのような構造になっています。r:ネットワークマトリックスのリストを作成する

Project Person_i Person_j Value 
1  A   B   6 
1  B   A   6 
2  A   B   4 
2  A   C   5 
2  B   A   4 
2  B   C   9 
2  C   A   5 
2  C   B   9 

私はデータを分割する方法とバイナリエッジリストを作成する方法を知っています。しかし、私はちょうど価値のあるデータで行列を作る方法を理解できません。

具体的には、私は私のデータは、この

リスト$ 1と同様に見てみたい:

A B 
A 0 6 
B 6 0 

リスト$ 2:

A B C 
A 0 4 5 
B 4 0 9 
C 5 9 0 

答えて

1

あなたはベースRで試すことができます。

#just in case the columns are factors 
df[,2:3]<-lapply(df[,2:3],as.character) 
f<-function(x) { 
    pers<-unique(unlist(x[,2:3])) 
    res<-matrix(0,length(pers),length(pers),dimnames=list(pers,pers)) 
    res[as.matrix(x[,2:3])]<-x[,4] 
    res 
} 
lapply(split(df,df$Project),f) 
#$`1` 
# A B 
# A 0 6 
# B 6 0 
#$`2` 
# A B C 
#A 0 4 5 
#B 4 0 9 
#C 5 9 0 

reshape2で簡単です。

require(reshape2) 
lapply(split(df,df$Project), 
     function(x) acast(x,Person_i ~ Person_j,value.var="Value",fill=0)) 
+0

ありがとうございます。これはクラスター(つまりプロジェクト)のサイズに大きな違いがある非常に大きなデータセットでも機能すると思いますか? –

+0

試してみる必要があります。問題が気になる場合は、データセットのサブセットを使用して、どのように反応するかを確認してください。 – nicola

+0

あなたのデータを見ずに告げることはできません。エラーメッセージに奇妙な二重カンマがあります。誤植をしていないことは確かですか?データセットにはいくつの列がありますか?実際のデータをよりよく反映した例を表示しなかったのはなぜですか? – nicola