logo

Kako združiti podatke v R z R merge, dplyr ali data.table

R je programski jezik in programsko okolje, ki se uporablja predvsem za statistično računalništvo in grafiko. Ponuja široko paleto orodij za obdelavo podatkov, analizo podatkov, vizualizacijo podatkov in statistično modeliranje.

Združevanje podatkov je naloga pri analizi in obdelavi podatkov. V R obstajajo različni načini za združevanje podatkovnih okvirov z uporabo 'spoj()' funkcijo iz osnove R z uporabo 'dplyr' paket in 'data.table' paket. V tej vadnici bomo uporabili zgornje tri načine za spajanje podatkov z uporabo R.



1. Uporaba 'merge()' iz osnove R:

Funkcija merge() v osnovi R nam pomaga združiti dva ali več podatkovnih okvirov na podlagi skupnih stolpcev. Izvaja različne vrste združevanj, kot so notranje združevanje, levo združevanje, desno združevanje in popolno združevanje.

Sintaksa:

merged_df <- merge(x,y,by = 'common_column',..)>
  • 'x' in 'in' so podatkovni okviri, ki jih želite združiti.
  • 'z' določa skupne stolpce, na katerih bo izvedeno spajanje.
  • Dodatni argumenti, npr 'vse.x' , vsi in 'vse' nadzorovati vrsto združevanja, ki naj se izvede.

primer:



Razmislite o dveh podatkovnih okvirih 'df1' in '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))>

>

>

Oglejmo si primere izvajanja različnih vrst združevanj s funkcijo 'merge()':

1. Notranje združevanje (privzeto vedenje):

R




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

>

>

Izhod:

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

Nastali podatkovni okvir 'inner_join' bo vključeval samo skupne vrstice, kjer 'ID' je prisoten v tako 'df1' kot 'df2'.

2. Left pridruži ( 'all.x=TRUE' ):

R




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

>

seznam razvrsti po javi
>

Izhod:

 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>

Nastali podatkovni okvir 'left_join' bo vključeval vse vrstice iz 'df1' in ujemajoče se vrstice iz 'df2'. Neujemajoče se vrstice iz »df2« bodo imele vrednost »NA«.

3. Desna pridružitev ( 'all.y=TRUE' ):

R

programski vzorci java




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

>

>

Izhod:

 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>

Nastali podatkovni okvir 'right_join' bo vključeval vse vrstice iz „df2“ in ujemajoče se vrstice iz „df1“. Neujemajoče se vrstice iz »df1« bodo imele vrednosti »NA«.

4. Popoln zunanji spoj ( 'vse =TRUE' )

R




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

>

>

Izhod:

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>

Nastali podatkovni okvir »full_join« bo vključeval vse vrstice iz obeh 'df1' in 'df2'. Vrednosti, ki se ne ujemajo, bodo imele vrednosti »NA«.

2. Uporaba paketa dplyr:

Paket 'dplyr' ponuja nabor funkcij za manipulacijo podatkov, vključno z združevanjem podatkovnih okvirov.

Primarna funkcija za združevanje v 'dplyr' je 'join()', ki podpira različne vrste združevanj.

Sintaksa:

merged_df<- join(x,y,by='common_column',type='type_of_join')>
  • 'x' in 'in' so podatkovni okvirji, ki jih je treba združiti.
  • 'z' določa skupne stolpce, na katerih naj se izvede spajanje
  • 'type_of_join' lahko 'notranji', 'levi', 'desni' ali 'polni', da določite vrsto pridružitve.

primer:
Namestite dplyr() zapakirajte in ustvarite dva podatkovna okvira, 'df1' in '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))>

>

>

Oglejmo si primere izvajanja različnih vrst združevanj s funkcijami 'dplyr':

1. Notranji spoj:

java povezan seznam

R




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

>

>

Izhod:

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

Nastali podatkovni okvir 'inner_join' bo vključeval samo pogoste vrstice, kjer je 'ID' prisoten tako v 'df1' kot v 'df2'.

2. Leva pridružitev:

R




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

>

>

Izhod:

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>

Nastali podatkovni okvir 'left_join' bo vključeval vse vrstice od 'df1' in ujemajoče se vrstice iz 'df2' . Neujemajoče se vrstice iz »df2« bodo imele vrednosti »NA«.

3. Desna pridružitev:

R




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

>

>

Izhod:

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>

Nastali podatkovni okvir 'right_join' bo vključeval vse vrstice iz 'df2' in ujemajoče se vrstice iz 'df1'. Vrstice »df1«, ki se ne ujemajo, bodo imele vrednosti »NA«.

4. Popolna zunanja združitev:

R




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

>

>

Izhod:

 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>

Nastali podatkovni okvir »full_join« bo vključeval vse vrstice iz obeh 'df1' in 'df2' . Vrstice, ki se ne ujemajo, bodo imele vrednosti »NA«.

3. Uporaba paketa 'data.table':

Paket 'data.table' ponuja učinkovit in hiter pristop k obdelavi podatkov. Zagotavlja funkcijo 'merge()'. Podoben je tistemu v osnovi R, vendar optimiziran za hitrost.

standardni odklon numpy

Sintaksa:

merged_dt <- merge(x, y, by = 'common_column', ...)>
  • 'x' in 'in' so podatkovni okviri, ki jih je treba združiti.
  • 'z' določa skupne stolpce, na katerih bo izvedeno spajanje.
  • Dodatni argumenti, npr 'vse.x', 'vse.y' in 'vse' ki nadzoruje vrsto pridružitve.

primer:

Namestite knjižnico data.table in ustvarite dve podatkovni tabeli, 'dt1' in '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))>

>

>

Oglejmo si primere izvajanja različnih vrst spajanj s funkcijo 'merge()' iz paketa 'data.table':

1. Notranja pridružitev (privzeto vedenje):

R




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

>

>

Izhod:

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

Nastali podatkovni okvir 'inner_join' bo vključeval samo pogoste vrstice, kjer je 'ID' prisoten tako v 'df1' kot v 'df2'.

2. Levi spoj ('all.x = TRUE'):

R




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

>

>

Izhod:

 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>

Nastali podatkovni okvir 'left_join' bo vključeval vse Neujemajoče se iz 'df1' in ujemajoče se vrstice iz 'df2'. Neujemajoče se vrstice iz »df2« bodo imele vrednosti »NA«.

3. Desna pridružitev ('all.y = TRUE'):

R




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

>

>

primerek java

Izhod:

 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>

Nastali podatkovni okvir 'right_join' bo vključeval vse Neujemajoče se vrstice iz »df2« in ujemajoče se vrstice iz »df1«. Neujemajoče se vrstice iz »df1« bodo imele vrednosti »NA«.

3. Polno zunanje združevanje ('vse = TRUE'):

R




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

>

>

Izhod:

 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>

Nastali podatkovni okvir »full_join« bo vključeval vse Neujemajoče se vrstice iz obeh 'df1' in 'df2'. Vrstice, ki se ne ujemajo, bodo imele vrednosti »NA«.

Ena od prednosti uporabe »dplyr« in »data.table« je, da zagotavljata bolj jedrnato in berljivo sintakso za manipulacijo podatkov v primerjavi z osnovnim R.

Povzetek:

  • 'merge()' ponuja splošnonamensko funkcijo za združevanje podatkovnih okvirov.
  • 'dplyr' se osredotoča na združevanje s poudarkom na berljivosti in enostavni uporabi.
  • 'podatki. tabela' zagotavlja hiter in učinkovit način za obdelavo velikih naborov podatkov z optimizirano zmogljivostjo.
  • Pristop moramo izbrati glede na zahtevnost naloge in izvedbene zahteve.