次のような配列を取得したいと思います。
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
それを行う最も簡単な方法は何ですか?
1回のrep
呼び出しでそれを行うことができます。 each
およびtimes
パラメーターは、each
が最初に実行されるように順番に評価されます。
rep(1:4, times=3, each=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
または、より単純です(配列ではなくベクトルを意味すると仮定します)
rep(rep(1:4,each=3),3)
42-の答えは、数字のシーケンスが1ずつ増加する場合に機能します。ただし、設定された間隔(たとえば、0から60 x 15)だけ増加する数字のシーケンスを含める場合は、次のようにします。
rep(seq(0,60,15), times = 3)
[1] 0 15 30 45 60 0 15 30 45 60 0 15 30 45 60
これを繰り返す回数を変更するだけです。
このような:
rep(sapply(1:4, function(x) {rep(x, 3)}), 3)
rep(x、N)は、xN回繰り返すベクトルを返します。 sapplyは、指定された関数をベクトル1:4の各要素に個別に適用し、各要素を3回連続して繰り返します。
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