Se lavori con record di dati che hanno lo stesso numero di colonne e desideri disporli sem­pli­ce­men­te uno sotto l’altro, ti con­si­glia­mo di uti­liz­za­re rbind() in R.

A cosa serve rbind() in R?

La funzione rbind() in R è una funzione utile per unire i dati riga per riga. Una delle sue ap­pli­ca­zio­ni prin­ci­pa­li consiste nell’aggiunta di nuove in­for­ma­zio­ni a un data frame già esistente. Questa pos­si­bi­li­tà risulta utile se i dati di cui disponi vengono ag­gior­na­ti re­go­lar­men­te e desideri in­te­grar­li in un record di dati già di­spo­ni­bi­le. La funzione rbind() unisce quindi i risultati a mano a mano, ela­bo­ran­do i dati in cicli o processi iterativi.

Inoltre, rbind() in R è uti­liz­za­ta spesso per combinare data frame che hanno la stessa struttura, ad esempio per eseguire analisi più ap­pro­fon­di­te oppure per unire diverse parti di uno stesso record di dati e creare un unico record di dati. Ricorda che rbind() funziona bene con record di dati piuttosto piccoli. Per i record di dati più grandi ti con­si­glia­mo invece di uti­liz­za­re pacchetti come dplyr poiché ti per­met­to­no di mi­glio­ra­re le pre­sta­zio­ni.

La sintassi di rbind() in R

È possibile indicare un numero a piacere di data frame come parametri di rbind() per com­bi­nar­li fra loro. È im­por­tan­te che tutti i frame di dati assegnati abbiano lo stesso numero di colonne e gli stessi nomi per le colonne.

rbind(data.frame1, data.frame2, ...)
R

Gli argomenti data.frame1, data.frame2, ecc. rap­pre­sen­ta­no i frame di dati o gli elenchi di data frame che devono essere uniti riga per riga.

Esempi di ap­pli­ca­zio­ne per rbind() in R

Per spiegare meglio il fun­zio­na­men­to di rbind() in R con un esempio concreto, partiamo dalla creazione di un data frame composto da due colonne:

#creating data frame 1
names<-c("Deborah","Tom","Matt","Laura","Rebecca")
status<-c("nurse","doctor","nurse","doctor","nurse")
df1<-data.frame(names, status)
df1
R

L’output si presenta così:

names status
1  Deborah     nurse
2  Tom   doctor
3  Matt      nurse
4  Laura   doctor
5  Rebecca     nurse
R

Suc­ces­si­va­men­te definiamo un ulteriore frame di dati con lo stesso numero di colonne:

#creating data frame 2
names<-c("Eva","John")
status<-c("doctor","nurse")
df2<-data.frame(names, status)
df2
R

L’output è il seguente:

names    status
 1  Eva     doctor
2   John      nurse
R

A questo punto è possibile combinare i due data frame l’uno con l’altro:

#binding rows of df1 and df2
rbind(df1,df2)
R

Il risultato è:

names     status
1  Deborah      nurse
2  Tom    doctor
3  Matt      nurse
4  Laura    doctor
5  Rebecca     nurse
6  Eva    doctor
7  John    nurse
R

I data frame di lunghezza diversa non possono essere uniti uti­liz­zan­do rbind() in R

Nelle parti seguenti ti mostriamo cosa succede quando si combinano data frame che hanno un numero di colonne dif­fe­ren­te.

Per prima cosa, creiamo nuo­va­men­te un frame di dati composto da due colonne:

#creating data frame 1
names<-c("Deborah","Tom","Matt","Laura","Rebecca")
status<-c("nurse","doctor","nurse","doctor","nurse")
df1<-data.frame(names, status)
df1
R

Output:

names     status
1  Deborah      nurse
2  Tom    doctor
3  Matt      nurse
4  Laura    doctor
5  Rebecca      nurse
R

Quindi definiamo un data frame con una terza colonna ag­giun­ti­va:

#creating data frame 2
names<-c("Eva","John")
status<-c("doctor","nurse")
age<-c("52","38")
df2<-data.frame(names, status, age)
df2
R

L’output ottenuto:

names    status    age
1  Eva    doctor        52
2  John      nurse      38
R

Ap­pli­chia­mo la funzione rbind() in R e otteniamo quindi il seguente messaggio di errore:

rbind(df1,df2)
Error in rbind(deparse.level, ...) :
    numbers of columns of arguments do not match
R

L’errore ci dice che non possiamo uti­liz­za­re rbind() per unire i due data frame, in quanto il loro numero di colonne non è uguale. Per farlo possiamo però uti­liz­za­re la funzione bind_rows() del pacchetto dplr.

Per combinare frame di dati di lunghezza diversa puoi uti­liz­za­re la funzione bind_rows()

Il problema dell’esempio pre­ce­den­te si risolve fa­cil­men­te con bind_rows().

#install dplyr
install.packages('dplyr')
#import libraries
library(dplyr)
#bind rows
bind_rows(df1,df2)
R

A questo punto otteniamo questo risultato:

names    status            age
1  Deborah      nurse      <NA>
2  Tom     doctor         <NA>
3  Matt       nurse         <NA>
4  Laura    doctor        <NA>
5  Rebecca       nurse   <NA>
6  Eva     doctor            52
7  John       nurse         38
R

Con bind_rows() possiamo unire cor­ret­ta­men­te i data frame, mentre i campi vuoti sono indicati con <NA>. La funzione è quindi una valida al­ter­na­ti­va a rbind() in R per i casi in cui il numero di colonne dei frame di dati non è identico.

Consiglio

Se vuoi saperne di più sulle funzioni per la vi­sua­liz­za­zio­ne e l’ela­bo­ra­zio­ne di record di dati in R, ti con­si­glia­mo di seguire i tutorial su plot in R e paste in R nella nostra guida.

Vai al menu prin­ci­pa­le