问题描述
我有一个大的sparse matrix
(Matrix
中的一个dgCMatrix
包R
对象)。
玩具示例:
m <- Matrix(c(0,2:0),3,5)
rownames(m) <- paste0("g",1:3)
colnames(m) <- paste0("c",1:3)
> m
3 x 5 sparse Matrix of class "dgCMatrix"
c1 c2 c3 c4 c5
g1 . 1 . . 2
g2 . . 2 . 1
g3 2 . 1 . .
我想melt
到data.frame
。
reshape2
的{{1}}需要将此melt
强制转换为dgCMatrix
对象,并且对于我正在使用的尺寸,它非常慢。所以我正在寻找更有效的方法。
我以为matrix
的{{1}}可以解决问题,但是它会删除零值:
mefa4
我想保留它们,但在Melt
的手册中看不到提供该参数的参数。有其他选择的想法吗?
解决方法
数据:
m <- Matrix(c(0,2:0),3,5)
rownames(m) <- paste0("g",1:3)
colnames(m) <- paste0("c",1:5)
解决方案:
data.frame(rows=rownames(x)[row(x)],cols=colnames(x)[col(x)],value=as.numeric(x))
这似乎比强制reshape2
和melt
的{{1}}的{{1}}的{{1}}要快:
matrix