2015-02-05 57 views
0

我想打开一个矩阵变成长长的行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)) 

Error in data.frame(row = c("1", "3", "3", "1", "2"), col = c("4", "4", : duplicate row.names: g, e

有没有这个可以在不使用web2edges实现另一种简单的方法?

+2

也许将'web2edges()'结果的rownames设置为NULL,然后转换为data.frame?或者直接执行as.data.frame.table(mat),然后子集。 – thelatemail 2015-02-05 23:37:57

+0

我喜欢表和子集选项,@thelatemail如果你想回答我会高兴地接受。 – user1320502 2015-02-06 14:16:12

+1

[从n×m矩阵转换为R中的长矩阵]的可能重复(http://stackoverflow.com/questions/30367922/convert-from-n-x-m-matrix-to-long-matrix-in-r) – 2017-04-21 14:24:48

回答

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