Rで繰り返し数列を振る
1, 2, 3, ... nという連番を振るなら,
1:10 seq(1,10,1)
などとやればよいのだけど,1からnまでの連番をm回繰り返したいときがある。
たとえば1, 2, 3, 1, 2, 3, 1, 2, 3みたいな。
これもrep関数で便利にできる。
rep(1:3, 3)
しかし,1, 1, 1, 2, 2, 2, 3, 3, 3みたいにしたいときめんどい。
for関数を使えばよい。でも,すぐfor関数を使ったりそれを埋め込んだりする男はディナーの支払いがスマートでない男のようなものだって祖母がいってた。
実はこれ,ちょっと気が効いたやり方がある。
#まずはさっきと同じ rep(1:3, 3) [1] 1 2 3 1 2 3 1 2 3 #これを行列にする matrix(rep(1:3, 3),3,3) [,1] [,2] [,3] [1,] 1 1 1 [2,] 2 2 2 [3,] 3 3 3 #これを転置しちゃう t(matrix(rep(1:3, 3),3,3)) [,1] [,2] [,3] [1,] 1 2 3 [2,] 1 2 3 [3,] 1 2 3 #これを戻す as.numeric(t(matrix(rep(1:3, 3),3,3))) [1] 1 1 1 2 2 2 3 3 3
うぇーい。できた。
などとこれまでずっと数年間この方法でやっていたら,最近になってrep関数にオプションがあることを知った。
「なんですかそのジジ臭いやりかたは!」と怒られた。ばあちゃん,ごめん。
#eachを使う rep(1:3,each=3) [1] 1 1 1 2 2 2 3 3 3
まぢで。
やはりなんでもすぐ調べる癖をもたなければならぬ。メロスは政治がわからぬらしいが私はなかなかスマートにはなれぬ。