Come unire i dati in R utilizzando R merge, dplyr o data.table

R è un linguaggio di programmazione e un ambiente software utilizzato principalmente per il calcolo statistico e la grafica. Fornisce un'ampia gamma di strumenti per la manipolazione dei dati, l'analisi dei dati, la visualizzazione dei dati e la modellazione statistica.

L'unione dei dati è un compito nell'analisi e nella manipolazione dei dati. In R ci sono vari modi per unire i frame di dati, utilizzando il file ‘unire()’ funzione dalla base R, utilizzando il 'dplir' pacchetto e il 'tabella dati' pacchetto. In questo tutorial utilizzeremo i tre modi precedenti per unire i dati utilizzando R.

1. Utilizzando 'merge()' dalla base R:

La funzione merge() in base R ci aiuta a combinare due o più frame di dati basati su colonne comuni. Esegue vari tipi di join come inner join, left join, right join e full join.

Sintassi:

merged_df  <- merge(x,y,by = 'common_column',..) 
  • 'X' E 'E' sono i frame di dati che vuoi unire.
  • 'di' specifica le colonne comuni su cui verrà eseguita l'unione.
  • Argomenti aggiuntivi come 'tutti.x' , alleato' E 'Tutto' controllare il tipo di unione da eseguire.

Esempio:

Consideriamo due frame di dati 'df1' e 'df2'

R




df1 <-> data.frame> (ID => c> (1, 2, 3, 4),> > Name => c> (> 'A'> ,> 'B'> ,> 'C'> ,> 'D'> ),> > Age => c> (25, 30, 35, 40))> df2 <-> data.frame> (ID => c> (2, 3, 4, 5),> > Occupation => c> (> 'Engineer'> ,> 'Teacher'> ,> 'Doctor'> ,> 'Lawyer'> ),> > Salary => c> (5000, 4000, 6000, 7000))>

Vediamo esempi di esecuzione di vari tipi di join utilizzando la funzione 'merge()':

1. Join interno (comportamento predefinito):

R




inner_join <-> merge> (df1, df2, by => 'ID'> )> print> (inner_join)>

Produzione:

 ID Name Age Occupation Salary 1 2 B 30 Engineer 5000 2 3 C 35 Teacher 4000 3 4 D 40 Doctor 6000 

Il dataframe risultante 'inner_join' includerà solo le righe comuni where 'ID' è presente in sia 'df1' che 'df2'.

2. Unisci a sinistra( 'all.x=VERO' ):

R




left_join <-> merge> (df1, df2, by => 'ID'> , all.x => TRUE> )> print> (left_join)>

Produzione:

 ID Name Age Occupation Salary 1 1 A 25 NA 2 2 B 30 Engineer 5000 3 3 C 35 Teacher 4000 4 4 D 40 Doctor 6000 

Il frame di dati risultante 'left_join' includerà tutte le righe da 'df1' e le righe corrispondenti da 'df2'. Le righe non corrispondenti da 'df2' avranno un valore 'NA'.

3. Unisciti a destra ( 'all.y=VERO' ):

R




right_join <-> merge> (df1, df2, by => 'ID'> , all.y => TRUE> )> print> (right_join)>

Produzione:

 ID Name Age Occupation Salary 1 2 B 30 Engineer 5000 2 3 C 35 Teacher 4000 3 4 D 40 Doctor 6000 4 5 NA Lawyer 7000 

Il frame di dati risultante 'right_join' includerà tutte le righe da 'df2' e le righe corrispondenti da 'df1'. Le righe non corrispondenti da 'df1' avranno valori 'NA'.

4. Join esterno completo( 'tutti =VERO' )

R




full_join <-> merge> (df1, df2, by => 'ID'> , all => TRUE> )> print> (full_join)>

Produzione:

ID Name Age Occupation Salary 1 1 A 25 NA 2 2 B 30 Engineer 5000 3 3 C 35 Teacher 4000 4 4 D 40 Doctor 6000 5 5 NA Lawyer 7000 

Il frame di dati risultante 'full_join' includerà tutte le righe sia da 'df1' che da 'df2'. I valori non corrispondenti avranno valori 'NA'.

2. Utilizzando il pacchetto 'dplyr':

Il pacchetto 'dplyr' fornisce una serie di funzioni per la manipolazione dei dati, inclusa l'unione di frame di dati.

La funzione principale per l'unione in 'dplyr' è 'giuntura()', che supporta vari tipi di join.

Sintassi:

merged_df <- join(x,y,by='common_column',type='type_of_join') 
  • 'X' E 'E' sono i frame di dati da unire.
  • 'di' specifica le colonne comuni su cui deve essere eseguita l'unione
  • 'tipo_di_join' può essere 'interno', 'sinistra', 'destra' o 'completo' per specificare il tipo di unione.

Esempio:
Installa il dplyr() pacchetto e creare due frame di dati, 'df1' E 'df2'.

R




library> (dplyr)> df1 <-> data.frame> (ID => c> (1, 2, 3, 4),> > Name => c> (> 'A'> ,> 'B'> ,> 'C'> ,> 'D'> ),> > Age => c> (20, 30, 40, 50))> df2 <-> data.frame> (ID => c> (2, 3, 4, 5),> > Occupation => c> (> 'Engineer'> ,> 'Teacher'> ,> 'Doctor'> ,> 'Lawyer'> ),> > Salary => c> (2000, 4000, 6000, 7000))>

Vediamo esempi di esecuzione di vari tipi di join utilizzando le funzioni “dplyr”:

1. Unione interna:

R




inner_join <-> inner_join> (df1, df2, by => 'ID'> )> print> (inner_join)>

Produzione:

 ID Name Age Occupation Salary 1 2 B 30 Engineer 2000 2 3 C 40 Teacher 4000 3 4 D 50 Doctor 6000 

Il frame di dati risultante 'inner_join' includerà solo il file righe comuni in cui 'ID' è presente sia in 'df1' che in 'df2'.

2. Unione a sinistra:

R




left_join <-> left_join> (df1, df2, by => 'ID'> )> print> (left_join)>

Produzione:

ID Name Age Occupation Salary 1 1 A 20 NA 2 2 B 30 Engineer 2000 3 3 C 40 Teacher 4000 4 4 D 50 Doctor 6000 

Il frame di dati risultante 'left_join' includerà tutte le righe da 'df1' e il righe corrispondenti da 'df2' . Le righe non corrispondenti da 'df2' avranno valori 'NA'.

3. Unisciti a destra:

R




right_join <-> right_join> (df1, df2, by => 'ID'> )> print> (right_join)>

Produzione:

ID Name Age Occupation Salary 1 2 B 30 Engineer 2000 2 3 C 40 Teacher 4000 3 4 D 50 Doctor 6000 4 5 NA Lawyer 7000 

Il dataframe risultante 'right_join' includerà tutte le righe da 'df2' e il righe corrispondenti da 'df1'. Le righe non corrispondenti di 'df1' avranno valori 'NA'.

4. Unione esterna completa:

R




full_join <-> full_join> (df1, df2, by => 'ID'> )> print> (full_join)>

Produzione:

 ID Name Age Occupation Salary 1 1 A 20 NA 2 2 B 30 Engineer 2000 3 3 C 40 Teacher 4000 4 4 D 50 Doctor 6000 5 5 NA Lawyer 7000 

Il frame di dati risultante 'full_join' includerà tutte le righe di 'df1' e 'df2' . Le righe non corrispondenti avranno valori 'NA'.

3. Utilizzando il pacchetto 'data.table':

Il pacchetto 'data.table' offre un approccio efficiente e veloce alla manipolazione dei dati. Fornisce la funzione 'merge()'. È simile a quello della base R ma ottimizzato per la velocità.

Sintassi:

merged_dt  <- merge(x, y, by = 'common_column', ...) 
  • 'X' E 'E' sono i frame di dati che devono essere uniti.
  • 'di' specifica le colonne comuni su cui verrà eseguita l'unione.
  • Argomenti aggiuntivi come 'tutti.x', 'tutti.y' E 'Tutto' che controlla il tipo di join.

Esempio:

Installa la libreria data.table e crea due tabelle dati, 'dt1' e 'dt2'.

R




library> (data.table)> dt1 <-> data.table> (ID => c> (1, 2, 3, 4),> > Name => c> (> 'A'> ,> 'B'> ,> 'C'> ,> 'D'> ),> > Age => c> (25, 30, 35, 40))> dt2 <-> data.table> (ID => c> (2, 3, 4, 5),> > Occupation => c> (> 'Engineer'> ,> 'Teacher'> ,> 'Doctor'> ,> 'Lawyer'> ),> > Salary => c> (5000, 4000, 6000, 7000))>

Vediamo esempi di esecuzione di vari tipi di unioni utilizzando la funzione 'merge()' dal pacchetto 'data.table':

1. Join interno (comportamento predefinito):

R




inner_join <-> merge> (df1, df2, by => 'ID'> )> print> (inner_join)>

Produzione:

 ID Name Age Occupation Salary 1 2 B 30 Engineer 2000 2 3 C 40 Teacher 4000 3 4 D 50 Doctor 6000 

Il frame di dati risultante 'inner_join' includerà solo il file righe comuni in cui 'ID' è presente sia in 'df1' che in 'df2'.

2. Join sinistro('all.x = TRUE'):

R




left_join <-> merge> (df1, df2, by => 'ID'> , all.x => TRUE> )> print> (left_join)>

Produzione:

 ID Name Age Occupation Salary 1 1 A 20 NA 2 2 B 30 Engineer 2000 3 3 C 40 Teacher 4000 4 4 D 50 Doctor 6000 

Il frame di dati risultante 'left_join' includerà Tutto Non corrispondente da 'df1' e il righe corrispondenti da 'df2'. Le righe non corrispondenti da 'df2' avranno valori 'NA'.

3. Join destro('all.y = TRUE'):

R




right_join <-> merge> (df1, df2, by => 'ID'> , all.y => TRUE> )> print> (right_join)>

Produzione:

 ID Name Age Occupation Salary 1 2 B 30 Engineer 2000 2 3 C 40 Teacher 4000 3 4 D 50 Doctor 6000 4 5 NA Lawyer 7000 

Il frame di dati risultante 'right_join' includerà Tutto Non corrispondente righe da 'df2' e le righe corrispondenti da 'df1'. Le righe non corrispondenti da 'df1' avranno valori 'NA'.

3. Join esterno completo('all = TRUE'):

R




full_join <-> merge> (df1, df2, by => 'ID'> , all => TRUE> )> print> (full_join)>

Produzione:

 ID Name Age Occupation Salary 1 1 A 20 NA 2 2 B 30 Engineer 2000 3 3 C 40 Teacher 4000 4 4 D 50 Doctor 6000 5 5 NA Lawyer 7000 

Il frame di dati risultante 'full_join' includerà Tutto Non corrispondente righe sia da 'df1' che da 'df2'. Le righe non corrispondenti avranno valori 'NA'.

Uno dei vantaggi dell'utilizzo di 'dplyr' e 'data.table' è che forniscono una sintassi più concisa e leggibile per la manipolazione dei dati rispetto alla base R.

Riepilogo:

  • ‘merge()’ fornisce una funzione generica per unire i frame di dati.
  • 'dplyr' si concentra sulla fusione con particolare attenzione alla leggibilità e alla facilità d'uso.
  • 'dati. table” fornisce un modo rapido ed efficiente per gestire set di dati di grandi dimensioni con prestazioni ottimizzate.
  • Dovremmo scegliere l'approccio in base alla complessità del compito e ai requisiti di esecuzione.