在R中使用数组的普通子集选择

时间:2013-08-29 10:23:12

标签: arrays r

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

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

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

b<-1:3

我想做以下选择:

a的第一列中选​​择那些在第二列中包含b的值。 我想用b作为a第三维的索引。即b的第一个值应在a[,,1]ba[,,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 

1 个答案:

答案 0 :(得分:2)

你可以这样做:

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

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