2013-04-22 9 views
18

Ho 3 set di dati che voglio riunire insieme. Ho rinominato mie colonne ad essere lo stesso:R: rbind più set di dati

names(DF1) <- c("A", "B", "C") 
names(DF2) <- c("A", "B", "C") 
names(DF3) <- c("A", "B", "C") 

Hanno ciascuna ottenuto numeri diversi di osservazioni (34, 54, 23, rispettivamente)

Tuttavia, quando provo con una funzione rbind, restituisce l'errore:

total <- rbind(DF1, DF2, DF3) 

Error in match.names(clabs, names(xi)) : 
    names do not match previous names 

Da altre domande risponde l'errore dovrebbe sorgere a causa di colonne con nomi diversi, ma ho controllato e ricontrollato che sono stati rinominati la stessa.

Mi piacerebbe finire con un set di dati totale con un totale di 111 osservazioni con titoli di colonne. Sono un principiante di R, quindi molte delle risposte di altre domande mi sfuggono. Qualcuno potrebbe essere in grado di rispondere a questo in parole povere?

+0

Sei sicuro che abbiano lo stesso numero di colonne? Prova 'str (DF1)' e così via per vedere tutti i tuoi set di dati. – JackeJR

+0

Grazie! Risulta che ho avuto una colonna null in uno dei miei set di dati, ma ora il mio problema è che alcune delle mie righe sono scomparse dopo il rbind. Quindi quando ho fatto il 'code' (rbind (DF1, DF2)) Invece delle 88 righe mi aspettavo di finire con 70 quando ho controllato con 'code' (nrow (totale)) – user2305783

+0

cosa ottieni in 'nrow (DF1) 'e' nrow (DF2) 'prima del' rbind'? – JackeJR

risposta

6

Questo può aiutare:

È possibile utilizzare rbind.fill da plyr pacchetto (può essere utilizzato anche se il nome di colonna non è lo stesso)

Ecco l'esempio da set di dati in optmatch pacchetto in R

library(optmatch) 
library(plyr) 
data(nuclearplants) 
x<-nuclearplants 
data1<-as.data.frame(x$cost) 
data1<-data1[1:20,] 
data1<-as.data.frame(data1) 
data2<-as.data.frame(x$date) 
rbind.fill(data1,data2) 

data1 x$date 
1 460.05  NA 
2 452.99  NA 
3 443.22  NA 
4 652.32  NA 
5 642.23  NA 
6 345.39  NA 
7 272.37  NA 
8 317.21  NA 
9 457.12  NA 
10 690.19  NA 
11 350.63  NA 
12 402.59  NA 
13 412.18  NA 
14 495.58  NA 
15 394.36  NA 
16 423.32  NA 
17 712.27  NA 
18 289.66  NA 
19 881.24  NA 
20 490.88  NA 
21  NA 68.58 
22  NA 67.33 
23  NA 67.33 
24  NA 68.00 
25  NA 68.00 
26  NA 67.92 
27  NA 68.17 
28  NA 68.42 
29  NA 68.42 
30  NA 68.33 
31  NA 68.58 
32  NA 68.75 
33  NA 68.42 
34  NA 68.92 
35  NA 68.92 
36  NA 68.42 
37  NA 69.50 
38  NA 68.42 
39  NA 69.17 
40  NA 68.92 
41  NA 68.75 
42  NA 70.92 
43  NA 69.67 
44  NA 70.08 
45  NA 70.42 
46  NA 71.08 
47  NA 67.25 
48  NA 67.17 
49  NA 67.83 
50  NA 67.83 
51  NA 67.25 
52  NA 67.83 
36

È possibile utilizzare do.call, in questo modo:

do.call("rbind", list(DF1, DF2, DF3)) 

Si noti che il secondo argomento di do.call è un elenco.

1

Per i guadagni di prestazioni, provare rbindlist dal pacchetto data.table ad es.

rbindlist(list(DF1,DF2,DF3)) 
Problemi correlati