在R中提取邻接矩阵的行名和列名

时间:2015-02-26 09:13:49

标签: r

    library(sna)  
    library(proxy)  
    library(igraph)  
    rawdataframe<-read.csv(file =     "~/Desktop/SNA/Techniques/LinkPrediction/Sample.csv" ,fill=TRUE,header=FALSE,sep=",")  
    rawgraphdata<-    graph.data.frame(rawdataframe,directed=TRUE,vertices=NULL)  
    adj<-get.adjacency(rawgraphdata)  
    g1<-as.matrix(adj)  
    adjmatrix<-simil(g1, method ="Jaccard", diag = TRUE, upper = TRUE ,pairwise = TRUE, by_rows = TRUE, convert_distances = TRUE,     auto_convert_data_frames = TRUE)  
    adjmatrix[adjmatrix >= 0.75]<-1   
    adjmatrix[adjmatrix <= 0.75]<-0

我使用过simil代理措施,结果如下所示。

输出如下:

       2 159 3 5 858 100 114 171
   2   0   0 0 0   0   0   0   0
   159 0   0 0 0   0   0   0   0
   3   0   0 0 0   0   0   0   0
   5   0   0 0 0   0   0   0   0
   858 0   0 0 0   0   0   0   0
   100 0   0 0 0   0   0   1   1
   114 0   0 0 0   0   1   0   1
   171 0   0 0 0   0   1   1   0  

我想提取(行,列)对,其中value对应于1。

1 个答案:

答案 0 :(得分:0)

正如NicE所指出的,您可以将whicharr.ind=1一起使用,它会为您提供行索引和列索引; 例如,使用apply收集行名和列名:

> apply(which (as.matrix(adjmatrix)==1,arr.ind=T), 2, function(x)rownames(as.matrix(adjmatrix))[x])

     row   col  
[1,] "114" "100"
[2,] "171" "100"
[3,] "100" "114"
[4,] "171" "114"
[5,] "100" "171"
[6,] "114" "171"

这将适用于您的情况,因为在邻接矩阵中,行名和列名应该相同。