Com combinar dades a R mitjançant R merge, dplyr o data.table
R és un llenguatge de programació i un entorn de programari que s'utilitza principalment per a la computació estadística i els gràfics. Proporciona una àmplia gamma d'eines per a la manipulació de dades, l'anàlisi de dades, la visualització de dades i el modelatge estadístic.
La fusió de dades és una tasca d'anàlisi i manipulació de dades. A R hi ha diverses maneres de combinar marcs de dades, utilitzant el 'fusionar ()' funció de la base R, utilitzant el 'dplyr' paquet, i el 'taula.dades' paquet. En aquest tutorial, utilitzarem les tres maneres anteriors de combinar dades amb R.
1. Utilitzant 'merge ()' de la base R:
La funció merge() a la base R ens ajuda a combinar dos o més marcs de dades basats en columnes comunes. Realitza diversos tipus d'unions, com ara unió interna, unió esquerra, unió dreta i unió completa.
Sintaxi:
merged_df <- merge(x,y,by = 'common_column',..)
- 'x' i ‘y’ són els marcs de dades que voleu combinar.
- 'per' especifica les columnes comunes sobre les quals es realitzarà la fusió.
- Arguments addicionals com 'tot.x' , all.y’ i 'tots' controlar el tipus d'unió que s'ha de realitzar.
Exemple:
Considereu dos marcs de dades 'df1' i '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))> |
Vegem exemples de realització de diversos tipus d'unions mitjançant la funció 'merge ()':
1. Unió interna (comportament per defecte):
R
inner_join <-> merge> (df1, df2, by => 'ID'> )> print> (inner_join)> |
Sortida:
ID Name Age Occupation Salary 1 2 B 30 Engineer 5000 2 3 C 35 Teacher 4000 3 4 D 40 Doctor 6000
El marc de dades 'inner_join' resultant només inclourà les files comunes on 'ID' està present a tant 'df1' com 'df2'.
2. Unió a l'esquerra ( 'all.x=TRUE' ):
R
left_join <-> merge> (df1, df2, by => 'ID'> , all.x => TRUE> )> print> (left_join)> |
Sortida:
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
El marc de dades 'left_join' resultant inclourà totes les files de 'df1' i les files coincidents de 'df2'. Les files que no coincideixen de 'df2' tindran un valor 'NA'.
3. Uneix-te a la dreta ( 'all.y=TRUE' ):
R
right_join <-> merge> (df1, df2, by => 'ID'> , all.y => TRUE> )> print> (right_join)> |
Sortida:
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
El marc de dades 'right_join' resultant inclourà totes les files de 'df2' i les files coincidents de 'df1'. Les files que no coincideixen de 'df1' tindran valors 'NA'.
4. Unió exterior completa ( 'tot = VERTADER' )
R
full_join <-> merge> (df1, df2, by => 'ID'> , all => TRUE> )> print> (full_join)> |
Sortida:
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
El marc de dades 'full_join' resultant inclourà totes les files de 'df1' i 'df2'. Els valors que no coincideixen tindran valors 'NA'.
2. Utilitzant el paquet 'dplyr':
El paquet 'dplyr' proporciona un conjunt de funcions per a la manipulació de dades, inclosa la fusió de marcs de dades.
La funció principal per combinar-se a 'dplyr' és 'unir-se ()', que admet diversos tipus d'unions.
Sintaxi:
merged_df <- join(x,y,by='common_column',type='type_of_join')
- 'x' i ‘y’ són els marcs de dades que s'han de combinar.
- 'per' especifica les columnes comunes sobre les quals s'ha de realitzar la fusió
- 'tipus_d'unió' pot ser 'interior', 'esquerra', 'dreta' o 'complet' per especificar el tipus d'unió.
Exemple:
Instal·leu el dplyr() empaquetar i crear dos marcs de dades, 'df1' i '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))> |
Vegem exemples de realització de diversos tipus d'unions mitjançant les funcions 'dplyr':
1. Combinació interna:
R
inner_join <-> inner_join> (df1, df2, by => 'ID'> )> print> (inner_join)> |
Sortida:
ID Name Age Occupation Salary 1 2 B 30 Engineer 2000 2 3 C 40 Teacher 4000 3 4 D 50 Doctor 6000
El marc de dades 'inner_join' resultant només inclourà files comunes on 'ID' està present tant a 'df1' com a 'df2'.
2. Unió a l'esquerra:
R
left_join <-> left_join> (df1, df2, by => 'ID'> )> print> (left_join)> |
Sortida:
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
El marc de dades 'left_join' resultant inclourà totes les files de 'df1' i la files coincidents de 'df2' . Les files que no coincideixen de 'df2' tindran valors 'NA'.
3. Uneix-te a la dreta:
R
right_join <-> right_join> (df1, df2, by => 'ID'> )> print> (right_join)> |
Sortida:
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
El marc de dades 'right_join' resultant inclourà totes les files de 'df2' i la files coincidents de 'df1'. Les files que no coincideixen de 'df1' tindran valors 'NA'.
4. Unió exterior completa:
R
full_join <-> full_join> (df1, df2, by => 'ID'> )> print> (full_join)> |
Sortida:
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
El marc de dades 'full_join' resultant inclourà totes les files de 'df1' i 'df2' . Les files que no coincideixen tindran valors 'NA'.
3. Utilitzant el paquet 'data.table':
El paquet 'data.table' ofereix un enfocament eficient i ràpid de la manipulació de dades. Proporciona la funció 'merge ()'. És similar al de la base R però optimitzat per a la velocitat.
Sintaxi:
merged_dt <- merge(x, y, by = 'common_column', ...)
- 'x' i ‘y’ són els marcs de dades que s'han de combinar.
- 'per' especifica les columnes comunes sobre les quals es realitzarà la fusió.
- Arguments addicionals com ‘all.x’, ‘all.y’ i 'tots' que controla el tipus d'unió.
Exemple:
Instal·leu la biblioteca data.table i creeu dues taules de dades, 'dt1' i '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))> |
Vegem exemples de realització de diversos tipus de combinacions mitjançant la funció 'merge ()' del paquet 'data.table':
1. Unió interna (comportament per defecte):
R
inner_join <-> merge> (df1, df2, by => 'ID'> )> print> (inner_join)> |
Sortida:
ID Name Age Occupation Salary 1 2 B 30 Engineer 2000 2 3 C 40 Teacher 4000 3 4 D 50 Doctor 6000
El marc de dades 'inner_join' resultant només inclourà files comunes on 'ID' està present tant a 'df1' com a 'df2'.
2. Unió a l'esquerra ('all.x = TRUE'):
R
left_join <-> merge> (df1, df2, by => 'ID'> , all.x => TRUE> )> print> (left_join)> |
Sortida:
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
El marc de dades 'left_join' resultant inclourà tots No coincideixen de 'df1' i la files coincidents de 'df2'. Les files que no coincideixen de 'df2' tindran valors 'NA'.
3. Unir-se a la dreta ('all.y = TRUE'):
R
right_join <-> merge> (df1, df2, by => 'ID'> , all.y => TRUE> )> print> (right_join)> |
Sortida:
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
El marc de dades 'right_join' resultant inclourà tots No coincideixen files de 'df2' i les files coincidents de 'df1'. Les files que no coincideixen de 'df1' tindran valors 'NA'.
3. Unió externa completa ('tot = TRUE'):
R
full_join <-> merge> (df1, df2, by => 'ID'> , all => TRUE> )> print> (full_join)> |
Sortida:
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
El marc de dades 'full_join' resultant inclourà tots No coincideixen files tant de 'df1' com de 'df2'. Les files que no coincideixen tindran valors 'NA'.
Un dels avantatges d'utilitzar 'dplyr' i 'data.table' és que proporcionen una sintaxi més concisa i llegible per a la manipulació de dades en comparació amb la base R.
Resum:
- 'merge()' proporciona una funció de propòsit general per combinar marcs de dades.
- 'dplyr' se centra en la fusió amb un enfocament en la llegibilitat i la facilitat d'ús.
- ‘dades. table' proporciona una manera ràpida i eficient de gestionar grans conjunts de dades amb un rendiment optimitzat.
- Hem de triar l'enfocament en funció de la complexitat de la tasca i dels requisits de realització.