2012-04-19 76 views
8

希望在這裏有一個簡單的答案,但我無法在任何地方找到它。將數字矩陣轉換爲data.table(或data.frame)

我有一個數字矩陣與標記的行和列:

 1 2 3 4 
a 6 7 8 9 
b 8 7 5 7 
c 8 5 4 1 
d 1 6 3 2 

我想形式的data.table(或data.frame然後我可以轉換):

col  row value 
    1  a  6 
    1  b  8 
    1  c  8 
    1  d  1 
    2  a  7 
    2  b  7 
    2  c  5 
    2  d  6 
    ... 

任何提示讚賞。

+3

未來搜索:在這裏看到對面:http://stackoverflow.com/q/9617348 – Aaron 2012-04-19 19:45:34

回答

10

使用melt從reshape2:

library(reshape2) 
#Fake data 
x <- matrix(1:12, ncol = 3) 
colnames(x) <- letters[1:3] 
rownames(x) <- 1:4 
x.m <- melt(x) 
x.m 

    Var1 Var2 value 
1  1 a  1 
2  2 a  2 
3  3 a  3 
4  4 a  4 
... 
6

假定「M」是你的矩陣...

data.frame(col = rep(colnames(m), each = nrow(m)), 
      row = rep(rownames(m), ncol(m)), 
      value = as.vector(m)) 

此執行速度極快的大型矩陣,還介紹了一些關於如何矩陣,如何訪問其中的內容,以及如何構建自己的向量。一起

+1

這是挺有意思的,謝謝你。對於1k x 1k矩陣,我發佈的所有三種解決方案都在2%以內。 – Chase 2012-04-19 20:26:19

15

as.tableas.data.frame功能會做到這一點:

> m <- matrix(sample(1:12), nrow=4) 
> dimnames(m) <- list(One=letters[1:4], Two=LETTERS[1:3]) 
> as.data.frame(as.table(m)) 
    One Two Freq 
1 a A 7 
2 b A 2 
3 c A 1 
4 d A 5 
5 a B 9 
6 b B 6 
7 c B 8 
8 d B 10 
9 a C 11 
10 b C 12 
11 c C 3 
12 d C 4 
+0

確定+1,對我來說這是一個新的......而且這很少見。 – John 2012-04-19 22:10:58