的关系被表示为矩阵x
这样的:如何从R中的矩阵创建边列表?
A B C D
A 0 2 1 1
B 2 0 1 0
C 1 1 0 1
D 1 0 1 0
的条目指它们的连接的数量。 任何人都可以告诉我如何写它作为边缘列表?谢谢! 我正在考虑把它写为边缘名单,如:
A B
A B
A C
A D
B C
但是,这是新锐榜的权利,如果我想创建一个网络阴谋? 谢谢!
的关系被表示为矩阵x
这样的:如何从R中的矩阵创建边列表?
A B C D
A 0 2 1 1
B 2 0 1 0
C 1 1 0 1
D 1 0 1 0
的条目指它们的连接的数量。 任何人都可以告诉我如何写它作为边缘列表?谢谢! 我正在考虑把它写为边缘名单,如:
A B
A B
A C
A D
B C
但是,这是新锐榜的权利,如果我想创建一个网络阴谋? 谢谢!
使用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"
我也建议你花一些时间在http://igraph.sourceforge.net/index.html阅读igraph
的文档,因为你的很多问题,最近都是简单的例子用法。
(作为奖励,plot(g)
会回答您的其他问题How to plot relationships in R?)
尝试在reshape2
使用melt
这
M <- matrix(c(0,2,1,1,2,0,1,0,1,1,0,1,1,0,1,0), 4, 4, dimnames=list(c("A","B","C","D"), c("A","B","C","D")))
eList <- NULL
for (i in 1:nrow(M)){
for (j in 1:ncol(M)) {
eList <- c(eList, rep(paste(dimnames(M)[[1]][i], dimnames(M)[[2]][j]), M[i,j]))
}
}
输出
> eList
[1] "A B" "A B" "A C" "A D" "B A" "B A" "B C" "C A" "C B" "C D" "D A" "D C"
您的解决方案反之亦然?我的意思是,如果我们有一个边界列表,并希望通过你的方式将其转换为邻接矩阵? – minoo
,然后删除重== 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
非常感谢您的帮助!我正在阅读您现在推荐的文件。 – user1787675