Sparse matrix to a data frame in R

21,048

Solution 1

Using summary, here is an example:

mat <- Matrix(data = c(1, 0, 2, 0, 0, 3, 4, 0, 0), nrow = 3, ncol = 3,
              dimnames = list(Origin      = c("A", "B", "C"),
                              Destination = c("X", "Y", "Z")),
              sparse = TRUE)
mat
# 3 x 3 sparse Matrix of class "dgCMatrix"
#    Destination
#     X Y Z
#   A 1 . 4
#   B . . .
#   C 2 3 .

summ <- summary(mat)
summ
# 3 x 3 sparse Matrix of class "dgCMatrix", with 4 entries 
#   i j x
# 1 1 1 1
# 2 3 1 2
# 3 3 2 3
# 4 1 3 4

data.frame(Origin      = rownames(mat)[summ$i],
           Destination = colnames(mat)[summ$j],
           Weight      = summ$x)
#   Origin Destination Weight
# 1      A           X      1
# 2      C           X      2
# 3      C           Y      3
# 4      A           Z      4

Solution 2

df <- as.data.frame(as.matrix(mat))

as.matrix will turn the sparse matrix to a dense matrix, if it is not too large:-) Then you can convert it to a data frame.

(mat is the example dgCMatrix from @flodel 's answer)

Share:
21,048

Related videos on Youtube

Seen
Author by

Seen

Updated on July 09, 2022

Comments

  • Seen
    Seen almost 2 years

    I have a sparse matrix

    Formal class 'dgCMatrix' [package "Matrix"] with 6 slots
      ..@ i       : int [1:37674] 1836 2297 108 472 1735 1899 2129 2131 5 67 ...
      ..@ p       : int [1:3417] 0 2 8 22 25 35 44 45 45 47 ...
      ..@ Dim     : int [1:2] 3416 3416
      ..@ Dimnames:List of 2
      .. ..$ : chr [1:3416] "AAA" "AAE" "AAL" "AAN" ...
      .. ..$ : chr [1:3416] "AAA" "AAE" "AAL" "AAN" ...
      ..@ x       : num [1:37674] 1 1 1 1 1 1 1 1 1 1 ...
      ..@ factors : list()
    

    What is a fast way to convert this matrix to a list as (except for a for loop):

    Origin Destination Weight
    AAA AAE 4
    AAL AAN 5
    

    Note: I only need to get the Origin and Destination for Weight>0

    • Chase
      Chase almost 12 years
      library(reshape2); dcast(Origin ~ Destination, data = dat, subset = Weight != 0)
  • cloudscomputes
    cloudscomputes over 4 years
    This doesn't give back what the sparse matrix's original pattern