2016-07-20 100 views
1

我敢肯定这可能是荒谬的简单,但无论出于何种原因,我无法在任何地方找到任何相关的文档。值匹配一个数组中的多个值,但与数组索引

我有一个多维数组,我们将其称为m1,我们将其称为v1

我知道v1中包含的每个元素都存在于m1的某处,我想知道它在哪里。问题是我也想知道数组索引方面的位置。

所以,说(简化的例子):

m1< array(c(3,9,110,2,36,0.01,-9,11,95,67,31,-2,2.5,10,1,49),dim=c(4,2,2)) 
v1<-c(110,36) 

> m1 

, , 1 

    [,1] [,2] 
[1,] 3 36 
[2,] 9 0.5 
[3,] 110 -9 
[4,] 2 11 

, , 2 

    [,1] [,2] 
[1,] 95 2.5 
[2,] 67 10 
[3,] 31 1 
[4,] -2 49 

> v1 
[1] 110 36 

我想一些函数f的输出(M1,V1)给我这样的:

3 1 1 
1 2 1 

如果我用which这样做,我会做一些像which(m1==v1,arr.ind=T),但它不会与一个值的向量匹配(看起来)。

否则,我可以使用match - match(v1,m1) - 但是,如果这不是正确的术语,这将返回向量形式的位置(道歉,而不是数组索引形式) - 在上面的例子中是3和5。

我能做些什么来获得我正在寻找的输出?或者,是否有一种简单的方法将矢量表单位置转换为相同的数组索引形式?在上述情况下很简单,但是当我处理多个维度时,它变得令人头疼。

回答

2

从你的榜样使用m1v1

vapply(X = v1, 
     FUN = function(x) which(x == m1, arr.ind = TRUE), 
     FUN.VALUE = integer(length(dim(m1))) 
     ) 

这将返回

 [,1] [,2] 
[1,] 3 1 
[2,] 1 2 
[3,] 1 1 

每列有值的一个指标。

相关问题