假设我有一个简单的多维结构,如下所示:
somestr<-array(sample.int(2, 120, replace=TRUE), dim=c(4,5,6))
我正在寻找结构中的所有位置(在这种情况下,数组),其中值等于,例如,对于我的示例,2。请注意,结构可能同样包含字符或逻辑。现在,它只是找到所有与给定值相等的值,但是将这个想法扩展到可以应用于结构中每个项目的任何逻辑值函数会很好(这将允许例如{{1}使用)。
我想得到的是一个(is.na
)矩阵,其列数与integer
一样多,具有维度(在本例中为3),以及多行(取决于sample.int)上面调用)因为有等于给定值的值(2)。此新矩阵中的值是somestr
中的“坐标”,其中值等于2.
我为将我的例子与解释混在一起道歉,但我希望这样更清楚。为了记录:我能够自己制作这个(甚至可以回答我自己的问题),但我希望有一个标准化的解决方案(阅读:在一些软件包中的现成功能),或者沿途学习新的技巧。
所以,简而言之,你能写一个函数吗
somestr
返回posOf<-function(somestr, valueToCompareTo)
中等于somestr
的位置矩阵,如果valueToCompareTo
是函数,则valueToCompareTo
中应用此函数的位置返回{ {1}}。
答案 0 :(得分:10)
我认为which
函数可以做到这一点:
which(somestr==2, arr.ind=TRUE)
(如果我理解正确的话)
R> set.seed(123)
R> somestr <- array(sample.int(2, 120, replace=TRUE), dim=c(4,5,6))
R> somestr
, , 1
[,1] [,2] [,3] [,4] [,5]
[1,] 1 2 2 2 1
[2,] 2 1 1 2 1
[3,] 1 2 2 1 1
[4,] 2 2 1 2 2
...
, , 6
[,1] [,2] [,3] [,4] [,5]
[1,] 2 1 1 1 2
[2,] 1 2 1 2 2
[3,] 1 2 2 2 2
[4,] 2 2 1 1 1
R> which(somestr==2, arr.ind=TRUE)
dim1 dim2 dim3
[1,] 2 1 1
[2,] 4 1 1
[3,] 1 2 1
[4,] 3 2 1
[5,] 4 2 1
...
[57,] 2 5 6
[58,] 3 5 6