我想将矩阵转换为行的长data.frame边缘列表,如下所示:
set.seed(666)
mat <- matrix(sample(0:1,12,replace=TRUE),nrow=3)
library(bipartite)
as.data.frame(web2edges(mat, return = TRUE))
但我希望行和列的名称在row
和col
列的输出中,而不是行的编号。
但是当我尝试这个时,我得到一个重复的行名称错误:
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
的情况下实现这一目标?
答案 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