Tutorial Dplyr: Îmbinați și alăturați date în R cu exemple

Introducere în analiza datelor

Analiza datelor poate fi împărțită în trei părți:

  • Extracție: În primul rând, trebuie să colectăm datele din mai multe surse și să le combinăm.
  • Transforma: Acest pas implică manipularea datelor. Odată ce am consolidat toate sursele de date, putem începe să curățăm datele.
  • imagina: Ultima mișcare este de a vizualiza datele noastre pentru a verifica neregulile.
Procesul de analiză a datelor
Procesul de analiză a datelor

Una dintre cele mai importante provocări cu care se confruntă oamenii de știință a datelor este manipularea datelor. Datele nu sunt niciodată disponibile în formatul dorit. Oamenii de știință de date trebuie să petreacă cel puțin jumătate din timp, curățând și manipulând datele. Aceasta este una dintre cele mai critice misiuni ale postului. Dacă procesul de manipulare a datelor nu este complet, precis și riguros, modelul nu va funcționa corect.

R Dplyr

R are o bibliotecă numită dplyr pentru a ajuta la transformarea datelor. Biblioteca dplyr este creată în mod fundamental în jurul a patru funcții pentru a manipula datele și cinci verbe pentru a curăța datele. După aceea, putem folosi biblioteca ggplot pentru a analiza și vizualiza datele.

Vom învăța cum să folosim biblioteca dplyr pentru a manipula a Cadrul de date.

Îmbinați datele cu R Dplyr

dplyr oferă o modalitate plăcută și convenabilă de a combina seturile de date. Este posibil să avem multe surse de date de intrare și, la un moment dat, trebuie să le combinăm. O îmbinare cu dplyr adaugă variabile în dreapta setului de date original.

Dplyr se alătură

Următoarele sunt patru tipuri importante de îmbinări utilizate în dplyr pentru a îmbina două seturi de date:

Funcţie Obiectiv Argumente Mai multe taste
left_join() Îmbinați două seturi de date. Păstrați toate observațiile din tabelul de origine date, origine, destinație, după = „ID” origine, destinație, prin = c(„ID”, „ID2”)
right_join() Îmbinați două seturi de date. Păstrați toate observațiile din tabelul de destinație date, origine, destinație, după = „ID” origine, destinație, prin = c(„ID”, „ID2”)
inner_join() Îmbinați două seturi de date. Exclude toate rândurile nepotrivite date, origine, destinație, după = „ID” origine, destinație, prin = c(„ID”, „ID2”)
full_join() Îmbinați două seturi de date. Păstrează toate observațiile date, origine, destinație, după = „ID” origine, destinație, prin = c(„ID”, „ID2”)

Vom studia toate tipurile de îmbinări printr-un exemplu simplu.

În primul rând, construim două seturi de date. Tabelul 1 conține două variabile, ID și y, în timp ce Tabelul 2 adună ID și z. În fiecare situație, trebuie să avem un pereche de chei variabil. În cazul nostru, ID-ul este al nostru cheie variabil. Funcția va căuta valori identice în ambele tabele și va lega valorile returnate la dreapta tabelului 1.

Îmbinați datele cu R Dplyr

library(dplyr)
df_primary <- tribble(
  ~ID, ~y,
   "A", 5,
   "B", 5,
   "C", 8,
   "D", 0,
  "F", 9)
df_secondary <- tribble(
  ~ID, ~z,
   "A", 30,
   "B", 21,
   "C", 22,
   "D", 25,
   "E", 29)

Dplyr left_join()

Cea mai comună modalitate de a îmbina două seturi de date este utilizarea funcției left_join(). Putem vedea din imaginea de mai jos că perechea de chei se potrivește perfect cu rândurile A, B, C și D din ambele seturi de date. Cu toate acestea, E și F au rămas. Cum tratăm aceste două observații? Cu left_join(), vom păstra toate variabilele în tabelul original și nu vom lua în considerare variabilele care nu au o pereche de chei în tabelul de destinație. În exemplul nostru, variabila E nu există în tabelul 1. Prin urmare, rândul va fi abandonat. Variabila F provine din tabelul de origine; va fi păstrat după left_join() și returnează NA în coloana z. Figura de mai jos reproduce ceea ce se va întâmpla cu un left_join().

Exemplu de dplyr left_join()

Exemplu de dplyr left_join()

left_join(df_primary, df_secondary, by ='ID')

ieșire:

## 
# A tibble: 5 x 3
##      ID   y.x   y.y
##   <chr> <dbl> <dbl>		
## 1     A     5    30
## 2     B     5    21
## 3     C     8    22
## 4     D     0    25
## 5     F     9    NA

Dplyr right_join()

Funcția right_join() funcționează exact ca left_join(). Singura diferență este rândul abandonat. Valoarea E, disponibilă în cadrul de date destinație, există în noul tabel și ia valoarea NA pentru coloana y.

Exemplu de dplyr right_join()

Exemplu de dplyr right_join()

right_join(df_primary, df_secondary, by = 'ID')

ieșire:

##
# A tibble: 5 x 3
##      ID   y.x   y.y
##   <chr> <dbl> <dbl>
## 1     A     5    30
## 2     B     5    21
## 3     C     8    22
## 4     D     0    25
## 5     E    NA    29

Dplyr inner_join()

Când suntem 100% siguri că cele două seturi de date nu se vor potrivi, putem lua în considerare revenirea rânduri existente în atât set de date. Acest lucru este posibil atunci când avem nevoie de un set de date curat sau când nu dorim să imputăm valorile lipsă cu media sau mediana.

Inner_join() vine în ajutor. Această funcție exclude rândurile nepotrivite.

Exemplu de dplyr inner_join()

Exemplu de dplyr inner_join()

inner_join(df_primary, df_secondary, by ='ID')

ieșire:

## 
# A tibble: 4 x 3
##      ID   y.x   y.y
##   <chr> <dbl> <dbl>
## 1     A     5    30
## 2     B     5    21
## 3     C     8    22
## 4     D     0    25

Dplyr full_join()

În cele din urmă, funcția full_join() păstrează toate observațiile și înlocuiește valorile lipsă cu NA.

Exemplu de dplyr full_join()

Exemplu de dplyr full_join()

full_join(df_primary, df_secondary, by = 'ID')

ieșire:

## # A tibble: 6 x 3
##      ID   y.x   y.y
##   <chr> <dbl> <dbl>
## 1     A     5    30
## 2     B     5    21
## 3     C     8    22
## 4     D     0    25
## 5     F     9    NA
## 6     E    NA    29

Perechi de chei multiple

Nu în ultimul rând, putem avea mai multe chei în setul nostru de date. Luați în considerare următorul set de date în care avem ani sau o listă de produse cumpărate de client.

Perechi de chei multiple în R

Dacă încercăm să îmbinăm ambele tabele, R afișează o eroare. Pentru a remedia situația, putem trece două variabile de perechi de chei. Adică, ID și anul care apar în ambele seturi de date. Putem folosi următorul cod pentru a îmbina tabelul 1 și tabelul 2

df_primary <- tribble(
  ~ID, ~year, ~items,
  "A", 2015,3,
  "A", 2016,7,
  "A", 2017,6,
  "B", 2015,4,
  "B", 2016,8,
  "B", 2017,7,
  "C", 2015,4,
  "C", 2016,6,
  "C", 2017,6)
df_secondary <- tribble(
  ~ID, ~year, ~prices,
  "A", 2015,9,
  "A", 2016,8,
  "A", 2017,12,
  "B", 2015,13,
  "B", 2016,14,
  "B", 2017,6,
  "C", 2015,15,
  "C", 2016,15,
  "C", 2017,13)
left_join(df_primary, df_secondary, by = c('ID', 'year'))

ieșire:

## # A tibble: 9 x 4
##      ID  year items prices
##   <chr> <dbl> <dbl>  <dbl>
## 1     A  2015     3      9
## 2     A  2016     7      8
## 3     A  2017     6     12
## 4     B  2015     4     13
## 5     B  2016     8     14
## 6     B  2017     7      6
## 7     C  2015     4     15
## 8     C  2016     6     15
## 9     C  2017     6     13

Funcțiile de curățare a datelor în R

Următoarele sunt cele patru funcții importante pentru a ordona (curăța) datele:

Funcţie Obiectiv Argumente
aduna() Transformați datele din larg în lung (date, cheie, valoare, na.rm = FALSE)
răspândire() Transformați datele de la lung la lat (date, cheie, valoare)
separa() Împărțiți o variabilă în două (date, col, în, sep= „”, remove = TRUE)
unitate() Uniți două variabile într-una singură (date, col, conc ,sep= “”, remove = TRUE)

Folosim biblioteca tidyr. Această bibliotecă aparține colecției bibliotecii pentru a manipula, curăța și vizualiza datele. Dacă instalăm R cu anaconda, biblioteca este deja instalată. Putem găsi biblioteca aici, https://anaconda.org/r/r-tidyr.

Dacă nu este deja instalat, introduceți următoarea comandă pentru a instala tidyr:

install tidyr : install.packages("tidyr")

aduna()

Obiectivele funcției gather() sunt de a transforma datele de la larg la lung.

Sintaxă

gather(data, key, value, na.rm = FALSE)
Arguments:
-data: The data frame used to reshape the dataset 
-key: Name of the new column created
-value: Select the columns used to fill the key column
-na.rm: Remove missing values. FALSE by default

Exemplu

Mai jos, putem vizualiza conceptul de remodelare de la lat la lung. Dorim să creăm o singură coloană numită creștere, completată de rândurile variabilelor trimestriale.

Exemplu de funcție gather() în R

library(tidyr)
# Create a messy dataset
messy <- data.frame(
  country = c("A", "B", "C"),
  q1_2017 = c(0.03, 0.05, 0.01),
  q2_2017 = c(0.05, 0.07, 0.02),
  q3_2017 = c(0.04, 0.05, 0.01),
  q4_2017 = c(0.03, 0.02, 0.04))
messy

ieșire:

##   country q1_2017 q2_2017 q3_2017 q4_2017
## 1       A    0.03    0.05    0.04    0.03
## 2       B    0.05    0.07    0.05    0.02
## 3       C    0.01    0.02    0.01    0.04
# Reshape the data
tidier <-messy %>%
gather(quarter, growth, q1_2017:q4_2017)
tidier

ieșire:

##    country quarter growth
## 1        A q1_2017   0.03
## 2        B q1_2017   0.05
## 3        C q1_2017   0.01
## 4        A q2_2017   0.05
## 5        B q2_2017   0.07
## 6        C q2_2017   0.02
## 7        A q3_2017   0.04
## 8        B q3_2017   0.05
## 9        C q3_2017   0.01
## 10       A q4_2017   0.03
## 11       B q4_2017   0.02
## 12       C q4_2017   0.04

În funcția gather(), creăm două noi variabile trimestru și creștere, deoarece setul nostru de date original are o variabilă de grup: adică țara și perechile cheie-valoare.

răspândire()

Funcția spread() face opusul gather.

Sintaxă

spread(data, key, value)
arguments: 
data: The data frame used to reshape the dataset
key: Column to reshape long to wide
value: Rows used to fill the new column

Exemplu

Putem remodela setul de date mai ordonat înapoi la dezordonat cu spread()

# Reshape the data
messy_1 <- tidier %>%
  spread(quarter, growth) 
messy_1

ieșire:

##   country q1_2017 q2_2017 q3_2017 q4_2017
## 1       A    0.03    0.05    0.04    0.03
## 2       B    0.05    0.07    0.05    0.02
## 3       C    0.01    0.02    0.01    0.04

separa()

Funcția separate() împarte o coloană în două conform unui separator. Această funcție este utilă în unele situații în care variabila este o dată. Analiza noastră poate necesita concentrarea pe lună și an și dorim să separăm coloana în două variabile noi.

Sintaxă

separate(data, col, into, sep= "", remove = TRUE)
arguments:
-data: The data frame used to reshape the dataset 
-col: The column to split
-into: The name of the new variables
-sep: Indicates the symbol used that separates the variable, i.e.:  "-", "_", "&"
-remove: Remove the old column. By default sets to TRUE.

Exemplu

Putem împărți trimestrul din an în setul de date mai ordonat prin aplicarea funcției separate().

separate_tidier <-tidier %>%
separate(quarter, c("Qrt", "year"), sep ="_")
head(separate_tidier)

ieșire:

##   country Qrt year growth
## 1       A  q1 2017   0.03
## 2       B  q1 2017   0.05
## 3       C  q1 2017   0.01
## 4       A  q2 2017   0.05
## 5       B  q2 2017   0.07
## 6       C  q2 2017   0.02

uni()

Funcția unite() concanează două coloane într-una singură.

Sintaxă

unit(data, col, conc ,sep= "", remove = TRUE)
arguments:
-data: The data frame used to reshape the dataset 
-col: Name of the new column
-conc: Name of the columns to concatenate
-sep: Indicates the symbol used that unites the variable, i.e:  "-", "_", "&"
-remove: Remove the old columns. By default, sets to TRUE

Exemplu

În exemplul de mai sus, am separat trimestrul de an. Dacă vrem să le unim. Folosim următorul cod:

unit_tidier <- separate_tidier %>%
  unite(Quarter, Qrt, year, sep ="_")
head(unit_tidier)

ieșire:

##   country Quarter growth
## 1       A q1_2017   0.03
## 2       B q1_2017   0.05
## 3       C q1_2017   0.01
## 4       A q2_2017   0.05
## 5       B q2_2017   0.07
## 6       C q2_2017   0.02

Rezumat

  • Analiza datelor poate fi împărțit în trei părți: Extracție, Transformare și Vizualizare.
  • R are o bibliotecă numită dplyr pentru a ajuta la transformarea datelor. Biblioteca dplyr este creată în mod fundamental în jurul a patru funcții pentru a manipula datele și cinci verbe pentru a curăța datele.
  • dplyr oferă o modalitate plăcută și convenabilă de a combina seturile de date. O îmbinare cu dplyr adaugă variabile în dreapta setului de date original.
  • Frumusețea dplyr este că se ocupă de patru tipuri de îmbinări similare cu SQL:
    • left_join() – Pentru a îmbina două seturi de date și pentru a păstra toate observațiile din tabelul de origine.
    • right_join() – Pentru a îmbina două seturi de date și pentru a păstra toate observațiile din tabelul de destinație.
    • inner_join() – Pentru a îmbina două seturi de date și a exclude toate rândurile nepotrivite.
    • full_join() – Pentru a îmbina două seturi de date și pentru a păstra toate observațiile.
  • Folosind biblioteca tidyr, puteți transforma un set de date folosind următoarele funcții:
    • aduna(): Transformați datele din larg în lung.
    • răspândire(): Transformați datele de la lung la lat.
    • separa(): Împărțiți o variabilă în două.
    • unitate(): Unitatea a două variabile într-una singură.