Intégrer des jointures à votre flux de travail data.table

Jointure de données avec data.table en R

Scott Ritchie

Postdoctoral Researcher in Systems Genomics

Enchaîner des expressions data.table

Les expressions data.table peuvent s'enchaîner :

demographics[...][...]

Forme générale pour enchaîner une jointure :

DT1[DT2, on][i, j, by]
    |    |   |  |  |
    |    |   |  |   --> regrouper selon quoi ?
    |    |   |   -----> quoi faire ?
    |    |    --------> sur quelles lignes ?
    |     ------------> colonnes clés de jointure
     -----------------> joindre à quel data.table ?
Jointure de données avec data.table en R

Joindre puis calculer

customers <- data.table(name   = c("Mark", "Matt", "Angela", "Michelle"), 
                        gender = c("M", "M", "F", "F"), 
                        age    = c(54, 43, 39, 63))
customers
       name gender age
1:     Mark      M  54
2:     Matt      M  43
3:   Angela      F  39
4: Michelle      F  63
Jointure de données avec data.table en R

Joindre puis calculer

purchases <- data.table(name  = c("Mark", "Matt", "Angela", "Michelle"),
                        sales = c(1, 5, 4, 3),
                        spent = c(41.70, 41.78, 50.77, 60.01))
purchases
       name sales spent
1:     Mark     1 41.70
2:     Matt     5 41.78
3:   Angela     4 50.77
4: Michelle     3 60.01
Jointure de données avec data.table en R

Joindre puis calculer

customers[purchases, 
          on = .(name)][sales > 1, 
                        j = .(avg_spent = sum(spent) / sum(sales)), 
                        by = .(gender)] 
   gender avg_spent
1:      M  13.91333
2:      F  20.00333
Jointure de données avec data.table en R

Calculer avec des jointures

Calculer avec des jointures :

DT1[DT2, on, j]
    |    |   | 
    |    |    ----> que faire sur le résultat de la jointure ?
    |     --------> avec quelles colonnes comme clés ? 
     -------------> joindre à quel data.table ?

Efficace pour de grands data.tables !

Jointure de données avec data.table en R

Joindre et créer des colonnes

La création de colonnes se fait dans le data.table principal :

customers[purchases, on = .(name), return_customer := sales > 1]
customers
       name gender age return_customer
1:     Mark      M  54           FALSE
2:     Matt      M  43            TRUE
3:   Angela      F  39            TRUE
4: Michelle      F  63            TRUE
Jointure de données avec data.table en R

Regrouper par correspondances

by = .EACHI regroupe j par chaque ligne provenant de DT2

DT1[DT2, on, j, by = .EACHI]
    |    |   |  |
    |    |   |   --> regroupé par chaque correspondance dans DT1.
    |    |    -----> quoi faire sur le résultat de la jointure ?
    |     ---------> avec quelles colonnes comme clés ? 
     --------------> joindre à quel data.table ?
Jointure de données avec data.table en R

Regrouper par correspondances

shipping[customers, on = .(name), 
         j = .("# of shipping addresses" = .N),
         by = .EACHI]

Jointure de données avec data.table en R

Regrouper par colonnes avec jointures

Regrouper par des colonnes dans by limite le calcul au data.table principal :

DT1[DT2, on, j, by]
    |    |   |  |
    |    |   |   --> regroupé par quelles colonnes de DT1 ?
    |    |    -----> que faire sur les colonnes de DT1 ?
    |     ---------> avec quelles colonnes comme clés ? 
     --------------> joindre à quel data.table ?
Jointure de données avec data.table en R

Regrouper par colonnes avec jointures

Joindre puis calculer par groupe dans customers :

customers[shipping, on = .(name), 
          .(avg_age = mean(age)), by = .(gender)]
   gender  avg_age
1:      M 46.66667
2:      F 39.00000
Jointure de données avec data.table en R

Passons à la pratique !

Jointure de données avec data.table en R

Preparing Video For Download...