-1

我有一个具有多个重叠标准及其发生频率的数据集。我想使用 R circlize包将数据绘制为网络(弦)图。我尝试将数据转换为邻接矩阵但没有成功。我可以将成对出现的观察结果转换为矩阵。但是,当有两个以上的标准时,我不能这样做。数据集可以在这里访问:

数据看起来像这样

 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
4

1 回答 1

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)

Dataframeaggr是边的列表。

于 2017-03-04T07:00:54.657 回答