2013-08-28 6 views
12

Ich versuche, ein Dataframe (Zoo-Objekt) 50 Mal als Ganzes zu replizieren, und das Ergebnis als eine Matrix zu erhalten, aber alle Befehle, die ich versucht habe, scheint nicht erfolgreich zu sein. Ich könnte leicht eine Funktion schreiben, die dies tun würde, aber ich hatte gehofft, das Ergebnis könnte leicht unter Verwendung rep erreicht werden.Replizieren eines Datenrahmens als Ganzes n mal

Betrachten Sie das folgende als Beispiel

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 

Versuchen wir nur x 2 mal zu replizieren. Das Endergebnis ich suche ist:

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

Dies ist, was ich bisher ausprobiert, aber keines dieser Arbeit:

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

ODER

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

OR

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

Könnte jemand bitte helfen?

Danke,

+1

Werfen Sie einen Blick auf [@ Jorans Antwort hier] (http://stackoverflow.com/questions/11693599/alternative-to-expand-grid-for-data-frames) – Henrik

Antwort

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

Was replicate?

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

Eigentlich viel schneller (aber immer noch nicht so schnell wie die Antwort akzeptiert) wäre die Verwendung von coredata() zu machen, die ich vergessen hatte.

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

Sie sollten auch 'as.data.frame' hinzufügen. –

Verwandte Themen