2017-03-03 9 views
-1

私はいくつかの重複する基準と出現頻度を持つデータセットを持っています。 R circlizeパッケージを使用して、ネットワーク(コード)ダイアグラムとしてデータをプロットします。私は、成功せずにデータを隣接行列に変換しようとしました。私はペアで発生する観測を行列として変換することができました。しかし、2つ以上の基準が一緒にある場合は、私はそれを行うことができません。 データセットはhereにアクセスすることができます。データフレームを隣接行列に変換するR

データは、あなたが複数の基準を持っており、それに周波数を割り当てる行のすべてのペアの組み合わせを取得する必要があり、この

criteria criteria1 criteria2 criteria3 criteria3 Frequency 
None     151 
G     121 
BH     108 
KBA     4 
IBA KBA    172 
AZE KBA    1 
AZE IBA KBA   3 
G KBA    6 
G IBA KBA   129 
G AZE KBA   3 
G AZE KBA IBA  7 
BH KBA    7 
BH IBA KBA   121 
BH AZE KBA   6 
BH AZE IBA KBA  15 
BH G    153 
BH G KBA   32 
BH G IBA KBA  200 
BH G AZE   5 
BH G AZE KBA  4 
BH G AZE IBA KBA 44 
+0

基準が2つ以上ある場合は、すべてのペアの組み合わせをエッジと見なしますか? – Marcelo

+0

Marcelo、はい!すべてのペアはエッジとしてみなされます。 – Arihant

答えて

1

のように見えます。そして、あなたはここで同じエッジの頻度を合計コードされています

require(dplyr) 

#Helper fucntion to get pairwise conbinations of criteria 
getEdges <- function(x) 
{ 
     # simplify the list 
     v<-unlist(x); 

     #Get the pairs and create a dataframe with the frequencies 
     cb<-combn(v[1:length(v)-1],2, simplify=F); 
     df<-data.frame(matrix(unlist(cb),ncol=2,byrow=T),frequency=as.integer(v[length(v)]),stringsAsFactors=F); 

     return (df) 
} 

#Get the pairs 
edges <- lapply(split(df, seq(nrow(df))), getEdges) 

#join the list into one dataframe 
edges<-bind_rows(edges) 

#Remove empty source and destination 
edges <-edges[edges$X1!=""&edges$X2!="",] 

#aggregate on edges 
aggr <- aggregate(edges$frequency,by=list(edges$X1,edges$X2), FUN=sum) 

DATAFRAME aggrは、エッジのリストです。

+0

Marcelo、ありがとう!コードダイアグラムをプロットした後、数字は非常に高く見え、ペアはエッジとして考えることができません。観測の総数(周波数の合計)は1292を超えることはできません。 – Arihant

関連する問題