【问题标题】:how to get row-column pairs from sparse matrix如何从稀疏矩阵中获取行列对
【发布时间】:2021-06-10 15:29:17
【问题描述】:

假设我有一个稀疏矩阵 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)

谢谢!

【问题讨论】:

  • 您想要矩阵的值列表还是列名和行名的列表?
  • 您可能正在寻找summary(M1)
  • 顺便说一句,如果您不想将0. 区别对待,您可以使用drop0(M1)

标签: r sparse-matrix


【解决方案1】:

在逻辑矩阵上使用whicharr.ind = TRUE,并根据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   

【讨论】:

    【解决方案2】:

    您可以使用下面的代码

    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
    

    【讨论】:

      猜你喜欢
      • 2012-01-10
      • 2018-06-14
      • 2020-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-07-22
      相关资源
      最近更新 更多