我有一个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]
中b
中a[,,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
答案 0 :(得分:2)
你可以这样做:
lapply(seq_along(b), function(i) a[a[, 2, i] == b[i], 1, i, drop = FALSE])
请注意,输出是一列矩阵的列表。我不认为没有列表就可以逃脱,因为每个b[i]
的匹配数可能会有所不同。此外,您可能希望删除drop = FALSE
,以便输出只是一个向量列表。