我正在尝试使用split-apply-combine方法构建一个大型稀疏矩阵,在数据帧的列子集上单独调用包sparse.model.matrix()
中的Matrix
,然后将它们绑定到一起全矩阵。由于内存限制,我必须这样做(我不能一次在整个df上调用sparse.model.matrix)。这个过程运行正常,我得到一个稀疏矩阵列表,但是它们有不同的维度,当我尝试将它们绑定在一起时,我不能。
例如:
data(iris)
set.seed(100)
iris$v6 <- sample(c("a","b","c",NA), 150, replace=TRUE)
iris$v7 <- sample(c("x","y",NA), 150, replace = TRUE)
sparse_m1 <- sparse.model.matrix(~., iris[,1:5])
sparse_m2 <- sparse.model.matrix(~.-1, iris[, 6:7])
dim(sparse_m1)
[1] 150 7
dim(sparse_m2)
[1] 71 4
cbind2(sparse_m1, sparse_m2)
Error: Matrices must have same number of rows in cbind2(sparse_m1, sparse_m2)
cbind(sparse_m1, sparse_m2)
Error: Matrices must have same number of rows in cbind2(..1, r)
矩阵具有相同的行名称,sparse_m2中只省略了一些行,因为它们在两列中都缺少值。有没有办法将它们结合起来?
我还尝试使用rbind.fill.matrix()
包中的plyr
,首先进行转置,然后调用它然后重新转置,但由于rbind.fill中的行名被忽略,因此我丢失了列名。基质
有什么想法吗?
答案 0 :(得分:1)
最近遇到同一问题,如今您可以
install.packages("Matrix.utils")
library(Matrix.utils)
sparse_filled <- rBind.fill(sparse_m1, sparse_m2)