如何从R中的矩阵创建边列表?

use*_*675 10 r list matrix social-networking edge-list

这种关系表示为这样的矩阵x:

      A    B    C     D
A     0    2    1     1
B     2    0    1     0
C     1    1    0     1
D     1    0    1     0
Run Code Online (Sandbox Code Playgroud)

条目指的是它们具有的连接数.谁能告诉我如何将其作为边缘列表?谢谢!我正在考虑将其写为边缘列表,如:

A B
A B
A C
A D
B C
Run Code Online (Sandbox Code Playgroud)

但是,如果我想创建网络图,这个边缘列表是否正确?谢谢!

flo*_*del 29

使用igraph包:

x <- matrix(c(0,2,1,1,2,0,1,0,1,1,0,1,1,0,1,0), 4, 4)
rownames(x) <- colnames(x) <- LETTERS[1:4]

library(igraph)
g <- graph.adjacency(x)
get.edgelist(g)

#      [,1] [,2]
#  [1,] "A"  "B" 
#  [2,] "A"  "B" 
#  [3,] "A"  "C" 
#  [4,] "A"  "D" 
#  [5,] "B"  "A" 
#  [6,] "B"  "A" 
#  [7,] "B"  "C" 
#  [8,] "C"  "A" 
#  [9,] "C"  "B" 
# [10,] "C"  "D" 
# [11,] "D"  "A" 
# [12,] "D"  "C"
Run Code Online (Sandbox Code Playgroud)

我还建议您花点时间阅读http://igraph.sourceforge.net/index.html上igraph文档,因为您最近的许多问题都是简单的案例用法.

(作为奖励,plot(g)将回答你的另一个问题如何在R中绘制关系?)


Zhi*_*Jia 14

使用meltin reshape2,然后删除权重== 0.如果不需要打印重量.只是删除它.

x
    sample1 sample2 sample3 sample4
feature1       0       2       1       1
feature2       2       0       1       0
feature3       1       1       0       1
feature4       1       0       1       0

melt(x)
   Var1    Var2 value
1  feature1 sample1     0
2  feature2 sample1     2
3  feature3 sample1     1
4  feature4 sample1     1
5  feature1 sample2     2
Run Code Online (Sandbox Code Playgroud)