将矩阵转换为长数据格式

时间:2015-02-05 22:04:41

标签: r networking matrix

我想将矩阵转换为行的长data.frame边缘列表,如下所示:

  set.seed(666)
  mat <- matrix(sample(0:1,12,replace=TRUE),nrow=3)
  library(bipartite)
  as.data.frame(web2edges(mat, return = TRUE))

但我希望行和列的名称在rowcol列的输出中,而不是行的编号。

但是当我尝试这个时,我得到一个重复的行名称错误:

set.seed(666)
mat <- matrix(sample(0:1,12,replace=TRUE),nrow=3)
colnames(mat) <- letters[1:4]
rownames(mat) <- letters[5:7] 
library(bipartite)
as.data.frame(web2edges(mat, return = TRUE))
  

data.frame出错(row = c(&#34; 1&#34;,&#34; 3&#34;,&#34; 3&#34;,&#34; 1&#34;,& #34; 2&#34;),col = c(&#34; 4&#34;,&#34; 4&#34;,:     重复row.names:g,e

是否有另一种简单的方法可以在不使用web2edges的情况下实现这一目标?

1 个答案:

答案 0 :(得分:0)

与矩阵不同,数据框不能有重复的行名。因此,您不必在web2edges之前更改行名和列名,而是必须在之后执行此操作。

set.seed(666)
mat <- matrix(sample(0:1,12,replace=TRUE),nrow=3)
library(bipartite)

#data frame with numerical values in `row` and `col` columns:
ndf <- as.data.frame(web2edges(mat, return = TRUE))

#converting `row` and `col` columns to factors:
ndf$col <- factor(ndf$col, levels = 4:7, labels = letters[1:4])
ndf$row <- factor(ndf$row, levels = 1:3, labels = letters[5:7])

> ndf
  row col edge.weights
1   e   a            1
2   g   a            1
3   g   b            1
4   e   c            1
5   f   d            1