2015-02-05 54 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