2013-08-28 4 views
12

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

Рассмотрим следующий пример

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

Посмотрите [@ ответ Joran здесь] (http://stackoverflow.com/questions/11693599/alternative-to-expand-grid-for-data-frames) – Henrik

ответ

12
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 
5

насчет replicate?

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

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

do.call(rbind, replicate(5, coredata(x), simplify = FALSE)) 
8
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 
+0

Вы также должны добавить 'as.data.frame'. –

Смежные вопросы