3

我有一个 6*3*3 维数组:

a<-array(data=rep(1:5,10),dim=c(6,3,3)

我有另一个带有 3 个数字的向量:

b<-1:3

我想做以下选择:

a从第二列中有 b 的值的第一列中选​​择。我想使用 b 作为 的第三维的索引a。即b应该在ina[,,1]的第二个值和bina[,,2]的第三个值中搜索第一个值a[,,3]

原始数组如下所示:

一个

, , 1

     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    2    3    4
[3,]    3    4    5
[4,]    4    5    1
[5,]    5    1    2
[6,]    1    2    3

, , 2

     [,1] [,2] [,3]
[1,]    4    5    1
[2,]    5    1    2
[3,]    1    2    3
[4,]    2    3    4
[5,]    3    4    5
[6,]    4    5    1

, , 3

     [,1] [,2] [,3]
[1,]    2    3    4
[2,]    3    4    5
[3,]    4    5    1
[4,]    5    1    2
[5,]    1    2    3
[6,]    2    3    4

选择后,这就是我想要得到的:

 , , 1

     [,1] 
[5,]    5 


, , 2

     [,1] 
[3,]    1  


, , 3

     [,1] 
[1,]    2 
[6,]    2 
4

1 回答 1

2

你可以做:

lapply(seq_along(b), function(i) a[a[, 2, i] == b[i], 1, i, drop = FALSE])

请注意,输出是一列矩阵的列表。我认为没有列表就无法逃脱,因为每个匹配的数量b[i]可能不同。此外,您可能想要删除drop = FALSE,因此输出将只是一个向量列表。

于 2013-08-29T11:31:42.613 回答