2016-04-20 4 views
1

Ich habe eine Matrix, die ich möchte, dass Teilmenge. Wenn ich es unterteile, ist die Ausgabe, die ich will, der Wert seines rowname.Subset-Matrix von Matrix und Output-Index

m 
    x y 
A 2 2 
B 2 2 
C 1 3 
D 1 1 
E 1 2 

m2 
    x y 
1 1 2 

Dies ist, was ich derzeit habe, die eindeutig nicht die richtige Ausgabe ist. Das scheint einfach, aber ich muss es noch herausfinden.

which(m2==m, arr.ind=TRUE) 
    row col 
1 1 2 

sollte die Ausgabe

sein
output 
"E" 

m2 mehr als 1 Zeile m mit der Teilmenge haben können.

Antwort

1

Wenn Sie jede Spalte von m2 einen Vektor machen, könnten Sie die gezeigte Technik ausleihen in this answer. Hinweis, habe ich eine zusätzliche Zeile zu m2 besser, das Problem zu veranschaulichen:

m <- matrix(c(2,2,2,2,1,3,1,1,1,2), 
      nrow = 5, ncol = 2, byrow = T, 
      dimnames = list(LETTERS[1:5], c("x", "y"))) 

m2 <- matrix(c(1,2,2,2), nrow = 2, ncol = 2, byrow = T, 
      dimnames = list(c(1,2), c("row", "col"))) 

apply(m2, 1, function(i) rownames(m)[colSums(t(m) == as.vector(i)) == ncol(m)]) 

# $`1` 
# [1] "E" 
# 
# $`2` 
# [1] "A" "B" 

Je kürzer, De Morgan's Law Version in this answer vorgeschlagen würde auch gelten ...

apply(m2, 1, function(i) rownames(m)[!colSums(t(m) != as.vector(i))])