如何从稀疏矩阵中获取行-列对

4
假设我有一个稀疏矩阵M1。
i<-c(1,5,2,4,2,2,8)
j<-c(2,5,3,2,4,2,4)
x<-rpois(7,2)
M1<-sparseMatrix(i,j,x=x)
rownames(M1) <- c("a", "b", "c", "d", "e", "f", "g", "h")
colnames(M1) <- c("L1", "L2", "L3", "L4", "L5")
M1

其中M1的形式如下:

8 x 5 sparse Matrix of class "dgCMatrix"
  L1 L2 L3 L4 L5
a  .  3  .  .  .
b  .  1  3  0  .
c  .  .  .  .  .
d  .  4  .  .  .
e  .  .  .  .  1
f  .  .  .  .  .
g  .  .  .  .  .
h  .  .  .  0  .

我该如何制作一个互动的行列对列表,类似于以下示例:

(a, L2)
(b, L2)
(b, L3)
(b, L4)
(d, L2)
(e, L5)
(h, L4)

感谢!

你想要矩阵的值列表还是列和行名称的列表? - Martin Gal
2
你可能在寻找 summary(M1) - tmfmnk
2
作为一个完全的旁白,如果你不想把 0. 区别对待,你可以使用 drop0(M1) - user20650
2个回答

2
在逻辑矩阵上使用带有arr.ind = TRUEwhich,并根据row/col索引提取行名称和列名称。
i1 <- which(M1 > 0, arr.ind = TRUE)
library(dplyr)
tibble(rn = row.names(M1)[i1[,1]], cn = colnames(M1)[i1[,2]]) %>%
    arrange(rn) 

-输出

# A tibble: 7 x 2
  rn    cn   
  <chr> <chr>
1 a     L2   
2 b     L2   
3 b     L3   
4 b     L4   
5 d     L2   
6 e     L5   
7 h     L4   

1
您可以使用以下代码。
with(
  summary(t(M1)),
  data.frame(i = row.names(M1)[j], j = colnames(M1)[i])
)

这提供了

  i  j
1 a L2
2 b L2
3 b L3
4 b L4
5 d L2
6 e L5
7 h L4

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接