Имена матрицы инцидентов извлекают все ИСТИНА - PullRequest
0 голосов
/ 30 апреля 2018

У меня есть матрица с 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 голосов
/ 30 апреля 2018

Для более общего решения, когда более одного столбца может соответствовать, рассмотрим матрицу 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], чтобы получить имена столбцов, которые имеют совпадающие значения строк (в этом примере, где значения являются двоичными).

...