2013-08-28 8 views
12

Sto provando a replicare un dataframe (oggetto zoo) 50 volte nel suo complesso, e ottenere il risultato come una matrice, ma tutti i comandi che ho provato sembra non avere successo. Potrei scrivere facilmente una funzione che farebbe questo, ma speravo che il risultato potesse essere raggiunto facilmente usando rep.Replica un dataframe nel suo complesso n volte

Si consideri il seguente come esempio

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 

Diciamo solo cercare di replicare x 2 volte. Il risultato finale che sto cercando è:

#  [,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 

Questo è quello che ho provato finora, ma nessuno di questi lavori:

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

O

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

O

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

Qualcuno può aiutare per favore?

Grazie,

+1

Dai un'occhiata alla [@ risposta di Joran qui] (http://stackoverflow.com/questions/11693599/alternative-to-expand-grid-for-data-frames) – Henrik

risposta

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

Che dire replicate?

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

In realtà, molto più veloce (ma ancora non così rapidamente come la risposta accettata) sarebbe quello di fare uso di coredata(), che avevo dimenticato.

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

Dovresti anche aggiungere 'as.data.frame'. –

Problemi correlati