R:二进制矩阵的索引列表

Mis*_*ion 5 r list matrix

说我有一个索引列表,如:

l <- list(c(1,2,3), c(1), c(1,5), c(2, 3, 5))
Run Code Online (Sandbox Code Playgroud)

其中指定矩阵中的非零元素,如:

(m <- matrix(c(1,1,1,0,0, 1,0,0,0,0, 1,0,0,0,5, 0,1,1,0,1), nrow=4, byrow=TRUE))

     [,1] [,2] [,3] [,4] [,5]
[1,]    1    1    1    0    0
[2,]    1    0    0    0    0
[3,]    1    0    0    0    5
[4,]    0    1    1    0    1
Run Code Online (Sandbox Code Playgroud)

什么是最快的方式,使用R,使ml,使该矩阵是非常大的,再说50.000行和列的2000?

akr*_*run 5

尝试

d1 <- stack(setNames(l, seq_along(l)))
library(Matrix)
m1 <- sparseMatrix(as.numeric(d1[,2]), d1[,1], x=1)
as.matrix(m1)
#     [,1] [,2] [,3] [,4] [,5]
#[1,]    1    1    1    0    0
#[2,]    1    0    0    0    0
#[3,]    1    0    0    0    1
#[4,]    0    1    1    0    1
Run Code Online (Sandbox Code Playgroud)

或者代替stack,我们可以使用melt

library(reshape2)
d2 <- melt(l)
sparseMatrix(d2[,2], d2[,1],x=1)
Run Code Online (Sandbox Code Playgroud)

或仅使用 base R

Un1 <- unlist(l)
m1 <- matrix(0, nrow=length(l), ncol=max(Un1))
m1[cbind(as.numeric(d1$ind), d1$values)] <- 1
m1
Run Code Online (Sandbox Code Playgroud)