Search code examples
rdataframetransformationdata.tablereshape

Convert a matrix with dimnames into a long format data.frame


Hoping there's a simple answer here but I can't find it anywhere.

I have a numeric matrix with row names and column names:

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

I want to melt the matrix to a long format, with the values in one column and matrix row and column names in one column each. The result could be a data.table or data.frame like this:

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

Any tips appreciated.


Solution

  • Use melt from 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
    ...