20

次のような配列を取得します。

1,1,1,2,2,2,3,3,3,4,4,4,1,1,1,2,2,2,3,3,3,4,4,4,1,1,1,2,2,2,3,3,3,4,4,4

それを行う最も簡単な方法は何ですか?

4

5 に答える 5

56

rep1回の呼び出しでそれを行うことができます。eachおよびtimesパラメータは、最初に実行された順に評価されeachます。

rep(1:4, times=3, each=3)  # 'each' done first regardless of order of named parameters
#[1] 1 1 1 2 2 2 3 3 3 4 4 4 1 1 1 2 2 2 3 3 3 4 4 4 1 1 1 2 2 2 3 3 3 4 4 4
于 2012-06-24T21:20:29.047 に答える
18

または、より単純です(配列ではなくベクトルを意味すると仮定します)

rep(rep(1:4,each=3),3)
于 2012-06-24T18:42:28.287 に答える
2

このような:

rep(sapply(1:4, function(x) {rep(x, 3)}), 3)

rep(x, N) は、x N 回繰り返すベクトルを返します。sapply は、指定された関数をベクトルの各要素に 1:4 で個別に適用し、各要素を 3 回連続して繰り返します。

于 2012-06-24T18:39:38.630 に答える
0

で配列操作を使った方法apermです。アイデアは、値を含む配列を構築することです。を使用して目的の出力に一致するようにそれらを再配置しaperm、 で配列を「展開」しcます。

c(aperm(array(1:4, dim=c(4,3,3)), c(2, 1, 3)))
 [1] 1 1 1 2 2 2 3 3 3 4 4 4 1 1 1 2 2 2 3 3 3 4 4 4 1 1 1 2 2 2 3 3 3 4 4 4
于 2017-11-01T20:20:55.997 に答える