logo

Gegevens samenvoegen in R met R merge, dplyr of data.table

R is een programmeertaal en een softwareomgeving die voornamelijk wordt gebruikt voor statistische berekeningen en grafische afbeeldingen. Het biedt een breed scala aan tools voor datamanipulatie, data-analyse, datavisualisatie en statistische modellering.

Het samenvoegen van gegevens is een taak in data-analyse en datamanipulatie. In R zijn er verschillende manieren om dataframes samen te voegen, met behulp van de 'samenvoegen()' functie van basis R, met behulp van de ‘dplyr’ pakket, en de 'data tafel' pakket. In deze zelfstudie gebruiken we de bovenstaande drie manieren om gegevens samen te voegen met R.



1. ‘merge()’ gebruiken vanaf basis R:

De functie merge() in basis R helpt ons twee of meer dataframes te combineren op basis van gemeenschappelijke kolommen. Het voert verschillende soorten joins uit, zoals inner join, left join, right join en full join.

Syntaxis:

merged_df <- merge(x,y,by = 'common_column',..)>
  • 'X' En 'En' zijn de gegevensframes die u wilt samenvoegen.
  • 'door' specificeert de gemeenschappelijke kolommen waarop de samenvoeging zal worden uitgevoerd.
  • Extra argumenten zoals ‘alles.x’ , steeg' En 'alle' bepaalt het type join dat moet worden uitgevoerd.

Voorbeeld:



Beschouw twee dataframes ‘df1’ en ‘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))>

>

>

Laten we voorbeelden bekijken van het uitvoeren van verschillende soorten joins met behulp van de functie ‘merge()’:

1. Inner join (standaardgedrag):

R




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

>

>

Uitgang:

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

Het resulterende ‘inner_join’ dataframe bevat alleen de algemene rijen waar 'ID KAART' is aanwezig zowel ‘df1’ als ‘df2’.

2. Linker join( ‘allemaal.x=WAAR’ ):

R




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

>

udp-protocol
>

Uitgang:

 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>

Het resulterende ‘left_join’-dataframe bevat alle rijen van ‘df1’ en de overeenkomende rijen uit ‘df2’. Niet-overeenkomende rijen uit ‘df2’ hebben een ‘NA’-waarde

3. Rechts aansluiten ( ‘all.y=WAAR’ ):

R




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

>

gekoppelde lijst java
>

Uitgang:

 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>

Het resulterende ‘right_join’-dataframe bevat alle rijen van ‘df2’ en de overeenkomende rijen uit ‘df1’. Niet-overeenkomende rijen uit ‘df1’ hebben ‘NA’-waarden.

4. Volledige buitenste join( ‘allemaal =WAAR’ )

R




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

>

>

Uitgang:

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>

Het resulterende ‘full_join’-dataframe bevat: alle rijen van zowel ‘df1’ als ‘df2’. Niet-overeenkomende waarden hebben ‘NA’-waarden.

2. Het ‘dplyr’-pakket gebruiken:

Het ‘dplyr’-pakket biedt een reeks functies voor gegevensmanipulatie, inclusief het samenvoegen van dataframes.

De primaire functie voor het samenvoegen in ‘dplyr’ is 'meedoen()', die verschillende soorten joins ondersteunt.

Syntaxis:

merged_df<- join(x,y,by='common_column',type='type_of_join')>
  • 'X' En 'En' zijn de dataframes die moeten worden samengevoegd.
  • 'door' specificeert de gemeenschappelijke kolommen waarop de samenvoeging moet worden uitgevoerd
  • ‘type_van_join’ kan ‘inner’, ‘left’, ‘right’ of ‘full’ zijn om het type join te specificeren.

Voorbeeld:
Installeer de dplyr() pakket en maak twee dataframes, ‘df1’ En ‘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))>

>

>

Laten we voorbeelden bekijken van het uitvoeren van verschillende soorten joins met behulp van de ‘dplyr’-functies:

1. Binnenverbinding:

bash if-verklaring

R




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

>

>

Uitgang:

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

Het resulterende ‘inner_join’-dataframe bevat alleen de gemeenschappelijke rijen waarin ‘ID’ aanwezig is in zowel ‘df1’ als ‘df2’.

2. Links aansluiten:

R




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

>

>

Uitgang:

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>

Het resulterende ‘left_join’-dataframe bevat: alle rijen vanaf ‘df1’ en de overeenkomende rijen uit ‘df2’ . Niet-overeenkomende rijen uit ‘df2’ hebben ‘NA’-waarden.

3. Rechter join:

R




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

>

>

Uitgang:

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>

Het resulterende ‘right_join’-dataframe bevat: alle rijen vanaf ‘df2’ en de overeenkomende rijen uit ‘df1’. Niet-overeenkomende rijen van ‘df1’ hebben ‘NA’-waarden.

4. Volledige buitenvoeg:

R




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

>

>

Uitgang:

 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>

Het resulterende ‘full_join’-dataframe bevat: alle rijen van zowel ‘df1’ als ‘df2’ . Niet-overeenkomende rijen hebben ‘NA’-waarden.

3. Met behulp van het ‘data.table’-pakket:

Het ‘data.table’-pakket biedt een efficiënte en snelle aanpak voor datamanipulatie. Het biedt de functie ‘merge()’. Het is vergelijkbaar met die in basis R, maar geoptimaliseerd voor snelheid.

Syntaxis:

merged_dt <- merge(x, y, by = 'common_column', ...)>
  • 'X' En 'En' zijn de dataframes die moeten worden samengevoegd.
  • 'door' specificeert de gemeenschappelijke kolommen waarop de samenvoeging zal worden uitgevoerd.
  • Extra argumenten zoals 'allemaal.x', 'allemaal.y' En 'alle' die het type join bepaalt.

Voorbeeld:

Installeer de data.table-bibliotheek en maak twee gegevenstabellen, ‘dt1’ en ‘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))>

>

string naar booleaanse java
>

Laten we voorbeelden bekijken van het uitvoeren van verschillende soorten samenvoegingen met behulp van de functie ‘merge()’ uit het pakket ‘data.table’:

1. Inner join (standaardgedrag):

R




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

>

>

Uitgang:

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

Het resulterende ‘inner_join’-dataframe bevat alleen de gemeenschappelijke rijen waarin ‘ID’ aanwezig is in zowel ‘df1’ als ‘df2’.

2. Linker join( ‘all.x = TRUE’):

R




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

>

>

Uitgang:

 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>

Het resulterende ‘left_join’-dataframe bevat: alle Niet-overeenkomend van ‘df1’ en de overeenkomende rijen uit ‘df2’. Niet-overeenkomende rijen uit ‘df2’ hebben ‘NA’-waarden.

3. Rechter join( ‘all.y = TRUE’):

R




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

>

>

Uitgang:

 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>

Het resulterende ‘right_join’-dataframe bevat: alle Niet-overeenkomend rijen uit ‘df2’ en de overeenkomende rijen uit ‘df1’. Niet-overeenkomende rijen uit ‘df1’ hebben ‘NA’-waarden.

3. Volledige buitenste join (‘allemaal = WAAR’):

R




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

>

computerwerk
>

Uitgang:

 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>

Het resulterende ‘full_join’-dataframe bevat: alle Niet-overeenkomend rijen van zowel ‘df1’ als ‘df2’. Niet-overeenkomende rijen hebben ‘NA’-waarden.

Een van de voordelen van het gebruik van ‘dplyr’ en ‘data.table’ is dat ze een beknoptere en leesbare syntaxis bieden voor gegevensmanipulatie in vergelijking met basis R.

Samenvatting:

  • ‘merge()’ biedt een algemene functie voor het samenvoegen van dataframes.
  • ‘dplyr’ richt zich op samenvoegen met een focus op leesbaarheid en gebruiksgemak.
  • 'gegevens. table’ biedt een snelle en efficiënte manier om grote datasets te verwerken met geoptimaliseerde prestaties.
  • We moeten de aanpak kiezen op basis van de complexiteit van de taak en de prestatievereisten.