1. ホーム
  2. r

[解決済み] data.frameの行をN回繰り返す。

2023-01-27 12:03:31

質問

以下のようなデータフレームがあります。

data.frame(a = c(1,2,3),b = c(1,2,3))
  a b
1 1 1
2 2 2
3 3 3

行を繰り返したい n 回繰り返したい。例えば、ここでは行を3回繰り返しています。

  a b
1 1 1
2 2 2
3 3 3
4 1 1
5 2 2
6 3 3
7 1 1
8 2 2
9 3 3

これをRで簡単にできる関数はないでしょうか?ありがとうございます!

どのように解決するのですか?

EDIT: より良い現代のRの答えに更新しました。

あなたが使用できるのは replicate() とすると rbind を実行し、結果を元に戻す。rownameは自動的に1:nrowsから実行されるように変更されます。

d <- data.frame(a = c(1,2,3),b = c(1,2,3))
n <- 3
do.call("rbind", replicate(n, d, simplify = FALSE))

より伝統的な方法はインデックスを使うことですが、ここではrownameの変更はそれほどきちんとしたものではありません(しかし、より有益なものです)。

 d[rep(seq_len(nrow(d)), n), ]

以下は上記の改良版で、最初の二つは purrr 関数型プログラミング、イディオムプールです。

purrr::map_dfr(seq_len(3), ~d)

と、より慣用的でない purrr (同じ結果、より厄介ですが) があります。

purrr::map_dfr(seq_len(3), function(x) d)

を使い、最後にリスト適用ではなくインデックス付けによって dplyr :

d %>% slice(rep(row_number(), 3))