将数据帧转换为R中的邻接矩阵

将数据帧转换为R中的邻接矩阵,r,matrix,social-networking,network-analysis,R,Matrix,Social Networking,Network Analysis,我有一个数据集,其中包含几个重叠的标准及其出现频率。我想使用R Circleze包将数据绘制为网络(弦)图。我曾尝试将数据转换为邻接矩阵,但没有成功。我可以将成对出现的观测值转换为矩阵。然而,当有两个以上的标准在一起时,我不能这样做。 可通过以下方式访问数据集: 数据如下所示 criteria criteria1 criteria2 criteria3 criteria3 Frequency None 151 G

我有一个数据集,其中包含几个重叠的标准及其出现频率。我想使用R Circleze包将数据绘制为网络(弦)图。我曾尝试将数据转换为邻接矩阵,但没有成功。我可以将成对出现的观测值转换为矩阵。然而,当有两个以上的标准在一起时,我不能这样做。 可通过以下方式访问数据集:

数据如下所示

 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

您必须获得具有多个条件的行的所有对组合,并为其指定频率。然后对相同边缘的频率求和,代码如下:

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)
require(dplyr)
#助手函数,用于获取条件的成对组合

当有超过2个标准时,你认为每一对组合都是边缘吗?马塞洛,是的!每一双都会被视为优势。马塞洛,谢谢你!绘制和弦图后,数字看起来很高,我意识到这些对不能被视为一条边。观察总数(频率总和)不得超过1292。