将稀疏矩阵索引列表转换为R中的矩阵

spo*_*234 5 r list matrix sparse-matrix

我有这个字符串列表:

dat <- list(V1=c("1:23","4:12"),V2=c("1:3","2:12","6:3"))
Run Code Online (Sandbox Code Playgroud)

列表元素V1和V2是列.1:23表示"此列中的第一个条目具有值23".所有其他条目应为零.矩阵的维数由最高的条目表示,在这种情况下,我们有2列(V1和V2),最高的行号是6,因此它将产生如下的2x6矩阵:

matrix(c(23,3,
     0,12,
     0,0,
     12,0,
     0,0,
     0,3),nrow=6,ncol=2,byrow=T)
Run Code Online (Sandbox Code Playgroud)

如何实现这种转换?

akr*_*run 4

您也可以尝试

library(dplyr)
library(tidyr)
library(Matrix)

 d1 <- unnest(dat,col) %>% 
           separate(x, into=c('row', 'val'), ':', convert=TRUE)  %>% 
           extract(col, into='col', '\\D+(\\d+)', convert=TRUE)

 as.matrix(with(d1, sparseMatrix(row, col, x=val)))
 #     [,1] [,2]
 #[1,]   23    3
 #[2,]    0   12
 #[3,]    0    0
 #[4,]   12    0
 #[5,]    0    0
 #[6,]    0    3
Run Code Online (Sandbox Code Playgroud)