Репликация кадра данных в целом n раз

Я пытаюсь реплицировать dataframe (объект zoo) 50 раз в целом и получать результат как матрицу, но все команды, которые я пробовал, кажется, не увенчались успехом. Я мог бы легко написать функцию, которая сделала бы это, но я надеялся, что результат можно легко достичь, используя rep.

Рассмотрим в качестве примера

следующее:
 x <- zoo(data.frame(A = c(1,2,3,4,5,6), B = c(7,8,9,10,11,12), C = c(13,14,15,16,17,18)), order.by = seq(as.Date("2012-01-01"), as.Date("2012-06-01"), by  = "month"))

 #> x
 #           A  B  C
 #2012-01-01 1  7 13
 #2012-02-01 2  8 14
 #2012-03-01 3  9 15
 #2012-04-01 4 10 16
 #2012-05-01 5 11 17
 #2012-06-01 6 12 18

Давайте попробуем реплицировать x 2 раза. Конечный результат, который я ищу, это:

 #      [,1] [,2] [,3]
 # [1,]    1    7   13
 # [2,]    2    8   14
 # [3,]    3    9   15
 # [4,]    4   10   16
 # [5,]    5   11   17
 # [6,]    6   12   18
 # [7,]    1    7   13
 # [8,]    2    8   14
 # [9,]    3    9   15
 #[10,]    4   10   16
 #[11,]    5   11   17
 #[12,]    6   12   18

Это то, что я пробовал до сих пор, но ни одна из этих работ не работает:

 matrix(rep(x,2), ncol = 3, byrow = T)

ИЛИ

 matrix(rep(x,2), ncol = 3, byrow = F)

ИЛИ

 matrix(rep(x, each = 2), ncol = 3)

Может ли кто-нибудь помочь?

Спасибо,

Ответ 1

coredata(x)[rep(seq(nrow(x)),50),]
       A  B  C
  [1,] 1  7 13
  [2,] 2  8 14
  [3,] 3  9 15
  [4,] 4 10 16
  [5,] 5 11 17
  [6,] 6 12 18
...snip...
[295,] 1  7 13
[296,] 2  8 14
[297,] 3  9 15
[298,] 4 10 16
[299,] 5 11 17
[300,] 6 12 18

Ответ 2

sapply(x, rep.int, times=3)
#      A  B  C
# [1,] 1  7 13
# [2,] 2  8 14
# [3,] 3  9 15
# [4,] 4 10 16
# [5,] 5 11 17
# [6,] 6 12 18
# [7,] 1  7 13
# [8,] 2  8 14
# [9,] 3  9 15
# [10,] 4 10 16
# [11,] 5 11 17
# [12,] 6 12 18
# [13,] 1  7 13
# [14,] 2  8 14
# [15,] 3  9 15
# [16,] 4 10 16
# [17,] 5 11 17
# [18,] 6 12 18

Ответ 3

Как насчет replicate?

do.call(rbind, replicate(5, as.matrix(x), simplify=FALSE))

На самом деле, гораздо быстрее (но все же не так быстро, как принятый ответ) было бы использовать coredata(), о котором я забыл.

do.call(rbind, replicate(5, coredata(x), simplify = FALSE))