事件矩阵名称提取全部为TRUE

时间:2018-04-30 15:45:26

标签: r matrix extract

我有一个1和0的矩阵。 这是一个例子:

structure(c(0L, 1L, 1L, 0L, 1L, 0L, 1L, 0L, 0L, 1L, 1L, 0L, 1L, 
0L, 1L, 0L, 0L, 1L, 0L, 1L, 1L, 1L, 1L, 0L, 0L, 1L, 1L, 0L, 1L, 
0L, 1L, 0L, 0L, 1L, 1L, 0L, 1L, 0L, 1L, 0L, 0L, 1L, 1L, 0L, 1L, 
0L, 1L, 0L, 0L, 1L, 0L, 1L, 0L, 1L, 1L, 0L, 1L, 0L, 0L, 1L, 1L, 
0L, 0L, 1L, 0L, 1L, 1L, 0L, 0L, 1L, 0L, 1L, 0L, 1L, 1L, 0L, 0L, 
1L, 1L, 0L, 1L, 0L, 1L, 0L, 1L, 0L, 1L, 0L, 1L, 0L, 1L, 0L, 1L, 
0L, 1L, 0L, 0L, 1L, 0L, 1L, 0L, 1L, 0L, 1L, 0L, 1L, 1L, 0L, 0L, 
1L, 0L, 1L, 1L, 0L, 0L, 1L, 1L, 0L, 0L, 1L), .Dim = c(2L, 60L
), .Dimnames = structure(list(c("P32121", "P60709"), c(" O14950", 
" O15111", " O75688", " O95218", " P04626", " P06213-1", " P06396", 
" P06702", " P07737", " P08413", " P11142", " P12931", " P14598", 
" P14618", " P19338", " P22087", " P23528", " P25101", " P27348", 
" P28482", " P29474", " P31750", " P35221", " P35813", " P37802", 
" P38340", " P40123", " P40417", " P45984", " P46680", " P49407", 
" P50402", " P60981", " P62158", " P63104", " P63261", " P84022", 
" Q00987", " Q02821", " Q08499", " Q08499-2", " Q13233", " Q13428", 
" Q13523", " Q14247", " Q14978", " Q15208", " Q15750", " Q549N0", 
" Q8K4J6", " Q8TCJ0-2", " Q92636", " Q96HA8", " Q99683", " Q9BSI4", 
" Q9PTD7", " Q9Q2G4", " Q9Y281", "P07550", "P60010")), .Names = c("", 
"")), class = "matrix")

我想提取与两行匹配的名称的合欢名。

含义:

   Rows  Match
1 P32121 P11142
2 P60709 P11142

P11142匹配两行。

我试过了

m[, colSums(m) == 2]

但它没有给我列名。 我想要所有与所有行匹配的列名。

谢谢

1 个答案:

答案 0 :(得分:1)

对于可以匹配多个列的更一般的解决方案,请考虑上面的矩阵m,但需要修改m[, 20] <- rep(1, 2)

然后你可以做

library(magrittr)
cbind(rows = rownames(m), 
      colnames(dt)[colSums(dt) == 2] %>% 
        rep(nrow(m)) %>% 
        matrix(nrow(m), byrow = T))




     rows                        
[1,] "P32121" " P11142" " P28482"
[2,] "P60709" " P11142" " P28482"

如果不需要该特定格式,请注意您可以colnames(dt)[colSums(dt) == 2]来获取具有匹配行值的列的名称(在此示例中,值为二进制)。