2013-12-16 7 views
9

Ho un problema senza dubbio semplice. Ho passato l'ultima ora circa a cercare una soluzione, ma mi manca chiaramente qualcosa. Se questo è davvero un duplicato per favore collegare il modo giusto per farlo:Combina due liste di dataframes, dataframe per dataframe

dati Esempio:

names <- c("Cycling1.opr", "Cycling2.opr", "Cycling3.opr") 
mydf1 <- data.frame(V1=c(1:5), V2=c(21:25)) 
mydf2 <- data.frame(V1=c(1:10), V2=c(21:30)) 
mydf3 <- data.frame(V1=c(1:30), V2=c(21:50)) 
opr <- list(mydf1,mydf2,mydf3) 
mydf4 <- data.frame(timestamp=c(1:5)) 
mydf5 <- data.frame(timestamp=c(1:10)) 
mydf6 <- data.frame(timestamp=c(1:30)) 
timestamp <- list(mydf4,mydf5,mydf6) 
names(opr) <- names 
names(timestamp) <- names 

Ogni lista (OPR e timestamp) ha sempre lo stesso numero di data.frames e quando avere lo stesso nome, ognuno di questi data.frames ha sempre la stessa lunghezza. Quello che mi piacerebbe fare è unire ogni dataframe con un nome simile in un singolo dataframe come parte di un elenco finale (forse chiamato finalopr) in modo tale che la sua struttura sia la seguente.

dput(finalopr) 
list(structure(list(V1 = 1:5, V2 = 21:25, timestamp = 1:5), .Names = c("V1", 
"V2", "timestamp"), row.names = c(NA, -5L), class = "data.frame"), 
structure(list(V1 = 1:10, V2 = 21:30, timestamp = 1:10), .Names = c("V1", 
"V2", "timestamp"), row.names = c(NA, -10L), class = "data.frame"), 
structure(list(V1 = 1:30, V2 = 21:50, timestamp = 1:30), .Names = c("V1", 
"V2", "timestamp"), row.names = c(NA, -30L), class = "data.frame")) 

risposta

10
> mapply(cbind, opr, timestamp, SIMPLIFY=FALSE) 
$Cycling1.opr 
    V1 V2 timestamp 
1 1 21   1 
2 2 22   2 
3 3 23   3 
4 4 24   4 
5 5 25   5 

$Cycling2.opr 
    V1 V2 timestamp 
1 1 21   1 
2 2 22   2 
3 3 23   3 
4 4 24   4 
5 5 25   5 
6 6 26   6 
7 7 27   7 
8 8 28   8 
9 9 29   9 
10 10 30  10 

$Cycling3.opr 
    V1 V2 timestamp 
1 1 21   1 
2 2 22   2 
3 3 23   3 
4 4 24   4 
5 5 25   5 
6 6 26   6 
7 7 27   7 
8 8 28   8 
9 9 29   9 
10 10 30  10 
11 11 31  11 
12 12 32  12 
13 13 33  13 
14 14 34  14 
15 15 35  15 
16 16 36  16 
17 17 37  17 
18 18 38  18 
19 19 39  19 
20 20 40  20 
21 21 41  21 
22 22 42  22 
23 23 43  23 
24 24 44  24 
25 25 45  25 
26 26 46  26 
27 27 47  27 
28 28 48  28 
29 29 49  29 
30 30 50  30 

Ecco la struttura:

> str(mapply(cbind, opr, timestamp, SIMPLIFY=FALSE)) 
List of 3 
$ Cycling1.opr:'data.frame': 5 obs. of 3 variables: 
    ..$ V1  : int [1:5] 1 2 3 4 5 
    ..$ V2  : int [1:5] 21 22 23 24 25 
    ..$ timestamp: int [1:5] 1 2 3 4 5 
$ Cycling2.opr:'data.frame': 10 obs. of 3 variables: 
    ..$ V1  : int [1:10] 1 2 3 4 5 6 7 8 9 10 
    ..$ V2  : int [1:10] 21 22 23 24 25 26 27 28 29 30 
    ..$ timestamp: int [1:10] 1 2 3 4 5 6 7 8 9 10 
$ Cycling3.opr:'data.frame': 30 obs. of 3 variables: 
    ..$ V1  : int [1:30] 1 2 3 4 5 6 7 8 9 10 ... 
    ..$ V2  : int [1:30] 21 22 23 24 25 26 27 28 29 30 ... 
    ..$ timestamp: int [1:30] 1 2 3 4 5 6 7 8 9 10 ... 
+0

Eccellente! Semplice come mi aspettavo. Grazie :) – user1912925

+0

piccola domanda: Che cosa succede se dfs in opr e timestamp hanno diversi nets? –

+1

@ N.Varela Sembra che tu abbia una nuova domanda. Valuta la possibilità di pubblicare una nuova domanda separata. Puoi sempre ricollegare a questo nel tuo post. – Thomas