【问题标题】:subset matrix by matrix and output index矩阵和输出索引的子集矩阵
【发布时间】:2016-04-20 19:35:22
【问题描述】:

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

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 。

【问题讨论】:

    标签: r subset


    【解决方案1】:

    如果您将m2 的每一列都设为向量,则可以借用in this answer 所示的技术。请注意,我在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 版本in this answer 也将应用...

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-11-18
      • 1970-01-01
      • 2019-10-20
      • 1970-01-01
      • 2016-02-05
      • 1970-01-01
      • 2018-05-12
      相关资源
      最近更新 更多