r语言 - 按矩阵和输出索引的子集矩阵



我有一个矩阵,我想把它子集化。当我对它进行子集化时,我想要的输出是其行名的值。

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"

本答案中建议的较短的德摩根定律版本也适用......

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

相关内容

  • 没有找到相关文章

最新更新