按矩阵和输出索引对矩阵进行子集化
subset matrix by matrix and 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
这是我目前拥有的,显然不是正确的输出。这看起来很简单,但我还没有弄明白。
which(m2==m, arr.ind=TRUE)
row col
1 1 2
输出应该是
output
"E"
m2 可以有超过 1 行的子集 m。
如果将 m2
的每一列都设为向量,则可以借用 所示的技术。请注意,我在 m2
中添加了一行以更好地说明问题:
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"
较短的De Morgan's Law version suggested 也适用...
apply(m2, 1, function(i) rownames(m)[!colSums(t(m) != as.vector(i))])
我有一个矩阵,我想对其进行子集化。当我对其进行子集化时,我想要的输出是其行名的值。
m
x y
A 2 2
B 2 2
C 1 3
D 1 1
E 1 2
m2
x y
1 1 2
这是我目前拥有的,显然不是正确的输出。这看起来很简单,但我还没有弄明白。
which(m2==m, arr.ind=TRUE)
row col
1 1 2
输出应该是
output
"E"
m2 可以有超过 1 行的子集 m。
如果将 m2
的每一列都设为向量,则可以借用 m2
中添加了一行以更好地说明问题:
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"
较短的De Morgan's Law version suggested
apply(m2, 1, function(i) rownames(m)[!colSums(t(m) != as.vector(i))])