3

私は6 * 3 * 3次元の配列を持っています:

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

3 つの数値を持つ別のベクトルがあります。

b<-1:3

次の選択をしたいと思います。

a2 番目の列に b がある値の最初の列から選択します。の 3 次元のインデックスとして b を使用したいと思いますa。つまり、 の最初の値はの 2 番目の値と の 3 番目の値でb検索する必要があります。a[,,1]ba[,,2]a[,,3]

元の配列は次のようになります。

a

, , 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])

出力は 1 列の行列のリストであることに注意してください。それぞれの一致数が異なる可能性があるため、リストなしで逃げることはできないと思いますb[i]。また、drop = FALSE出力がベクトルのリストになるように削除することもできます。

于 2013-08-29T11:31:42.613 に答える