将 dgCMatrix 转换为数据框

How*_*ing 7 r sparse-matrix

我想将稀疏矩阵转换为类型(行、列、值)的数据框。我发现诸如http://r.789695.n4.nabble.com/Converting-sparse-matrix-to-data-frame-in-Matrix-package-td2332012.html之类的问题在问题中以行、列开头,value 并创建一个稀疏矩阵。我想要逆,我不能使用 as.matrix 函数,因为矩阵太大。这是一个小例子。

r = c(1,2,2,3,3)
c = c(4,1,2,3,5)
v = c(1,2,1,3,1)

a = sparseMatrix(i=r,j=c,x=v) 

3 x 5 sparse Matrix of class "dgCMatrix"

[1,] . . . 1 .
[2,] 2 1 . . .
[3,] . . 3 . 1
Run Code Online (Sandbox Code Playgroud)

我可以得到一个 data.frame

  r c v
1 1 4 1
2 2 1 2
3 2 2 1
4 3 3 3
5 3 5 1
Run Code Online (Sandbox Code Playgroud)

谢谢

dww*_*dww 9

您可以使用

b = as.data.frame(summary(a))
#   i j x
# 1 2 1 2
# 2 2 2 1
# 3 3 3 3
# 4 1 4 1
# 5 3 5 1
Run Code Online (Sandbox Code Playgroud)

如果您需要与示例中相同的顺序,则可以使用

b = b[order(b$i),]
#   i j x
# 4 1 4 1
# 1 2 1 2
# 2 2 2 1
# 3 3 3 3
# 5 3 5 1
Run Code Online (Sandbox Code Playgroud)

另一种选择,虽然不是那么整洁,是使用

b = as(a, "dgTMatrix")
cbind.data.frame(r = b@i + 1, c = b@j + 1, x = b@x)
Run Code Online (Sandbox Code Playgroud)

  • 知道这种方法是否确实比“as.matrix %>% as.data.frame”方法便宜吗?(昵称并不重要) (2认同)