R: sparse matrix conversion

后端 未结 1 1939
北恋
北恋 2020-12-24 10:02

I have a matrix of factors in R and want to convert it to a matrix of dummy variables 0-1 for all possible levels of each factors.

However this \"dummy\" matrix is v

相关标签:
1条回答
  • 2020-12-24 10:46

    Quite tricky but I think I got it.

    Let's start with a sparse matrix from the Matrix package:

    i <- c(1,3:8)
    j <- c(2,9,6:10)
    x <- 7 * (1:7)
    X <- sparseMatrix(i, j, x = x)
    

    The Matrix package uses a column-oriented compression format, while SparseM supports both column and row oriented formats and has functions that can easily handle the conversion from one format to the other.

    So we will first convert our column-oriented Matrix into a column-oriented SparseM matrix: we just need to be careful calling the right constructor and noticing that both packages use different conventions for indices (start at 0 or 1):

    X.csc <- new("matrix.csc", ra = X@x,
                               ja = X@i + 1L,
                               ia = X@p + 1L,
                               dimension = X@Dim)
    

    Then, change from column-oriented to row-oriented format:

    X.csr <- as.matrix.csr(X.csc)
    

    And you're done! You can check that the two matrices are identical (on my small example) by doing:

    range(as.matrix(X) - as.matrix(X.csc))
    # [1] 0 0
    
    0 讨论(0)
提交回复
热议问题