You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
based on :
$ git diff 2f49a0d HEAD ./vignettes/datatable-joins.Rmd
diff --git a/vignettes/datatable-joins.Rmd b/vignettes/datatable-joins.Rmd
index b3b3059..3d7cf8c 100644
Comme beaucoup de choses ont changé, nous allons expliquer les nouvelles caractéristiques dans les groupes suivants :
147
146
148
147
-**Niveau colonne**
149
-
- Le *premier groupe* de colonnes dans le nouveau data.table vient de la table `x` .
150
-
- Le *second groupe* de colonnes de la nouvelle data.table vient de la table `i`.
148
+
- Le *premier groupe* de colonnes dans le nouveau `data.table` vient de la table `x` .
149
+
- Le *second groupe* de colonnes de la nouvelle `data.table` vient de la table `i`.
151
150
- Si l'opération de jointure fait apparaître un **conflit de nom** (quand les deux tables ont un même nom de colonne) le ***prefixe***`i.` est ajouté aux noms des colonnes de la **table de droite** (table en position `i`).
152
151
153
152
-**Niveau ligne**
@@ -169,7 +168,7 @@ Products[ProductReceived,
169
168
on = list(id = product_id)]
170
169
```
171
170
172
-
- Inclure les colonnes associées dans l'alias `data.table``list` : `.`.
171
+
- Inclure les colonnes associées dans l'alias `.` de `data.table``list`.
La plupart du temps après avoir terminé une jointure il faut faire des adaptations supplémentaires. Pour cela plusieurs alternatives vous sont proposées :
205
+
La plupart du temps après une jointure il faut faire des adaptations supplémentaires. Pour cela plusieurs alternatives vous sont proposées :
207
206
208
207
- Chaîner une nouvelle instruction en ajoutant une paire de crochets `[]`.
209
208
- En passant comme argument `j` une liste des colonnes que l'on veut conserver ou créer.
@@ -233,12 +232,11 @@ Products[
233
232
]
234
233
```
235
234
236
-
237
-
##### Résumer avec`on` dans `data.table`
235
+
##### Résumer avec `on` dans `data.table`
238
236
239
237
Nous pouvons aussi utiliser cette alternative pour renvoyer les résultats agrégés en fonction des colonnes présentes dans la table `x` .
240
238
241
-
Par exemple on pourrait s'intéresser à la somme dépensée pour acheter chaque produit au fil des jours, quelque soient ces produits.
239
+
Par exemple on pourrait s'intéresser à la somme dépensée pour acheter chaque produit au fil des jours.
242
240
243
241
```{r}
244
242
dt1 = ProductReceived[
@@ -248,7 +246,7 @@ dt1 = ProductReceived[
248
246
j = .(total_value_received = sum(price * count))
249
247
]
250
248
251
-
# alternative using multiple [] queries
249
+
# alternative utilisant plusieurs requêtes []
252
250
dt2 = ProductReceived[
253
251
Products,
254
252
on = c("product_id" = "id"),
@@ -261,7 +259,7 @@ identical(dt1, dt2)
261
259
262
260
#### 3.1.4. Jointure basée sur plusieurs colonnes
263
261
264
-
Jusqu'à présent, nous avons réalisé les jointures en se basant sur une colonne `data.table`, mais il est important de savoir que le package peut joindre des tables en prenant en compte plusieurs colonnes.
262
+
Jusqu'à présent, nous avons réalisé des jointures basées sur une colonne `data.table`, mais il est important de savoir que le package peut joindre des tables en prenant en compte plusieurs colonnes.
265
263
266
264
Pour illustrer cela supposons que nous voulions ajouter `tax_prop` de `NewTax` pour **mettre à jour** la table `Products`.
267
265
@@ -273,7 +271,7 @@ NewTax[Products, on = c("unit", "type")]
273
271
274
272
Utilisez cette méthode pour combiner les colonnes de deux tables en se basant sur une ou plusieurs références mais ***en conservant seulement les lignes qui correspondent entre les deux tables***.
275
273
276
-
Pour réaliser cette opération il suffit d'ajouter `nomatch = NULL`ou `nomatch = 0`à l'une quelconque des opérations de jointure précédentes pour renvoyer le même résultat.
274
+
Pour réaliser cette opération il suffit d'ajouter `nomatch = NULL` à l'une quelconque des opérations de jointure précédentes pour renvoyer le même résultat.
277
275
278
276
```{r}
279
277
# First Table
@@ -316,15 +314,14 @@ Dans ce cas l'opération renvoie la ligne de `product_id = 6,` car il ne figure
316
314
317
315
### 3.4. Semi jointure
318
316
319
-
Cette méthode **ne garde que les lignes qui correspondent à une ligne de la seconde table** sans combiner les colonnes des tables.
317
+
Cette méthode **n'extrait que les lignes qui correspondent à une ligne de la seconde table** sans combiner les colonnes des tables.
320
318
321
319
En tant que jointure ceci est très similaire aux sous-ensembles, mais comme cette fois nous passons une table complète dans `i` nous devons vérifier que :
322
320
323
321
- Chaque ligne de la table `x` est dupliquée à cause de la duplication des lignes dans la table passée dans l'argument `i`.
324
322
325
323
- Toutes les lignes renommées de `x` doivent conserver l'ordre originel des lignes.
326
324
327
-
328
325
Pour faire ceci, suivez les étapes ci-après :
329
326
330
327
1. Réaliser une **jointure interne** avec `which = TRUE` pour sauvegarder les numéros de ligne liés à chaque ligne sélectionnée de la table `x` .
Utiliser cette méthode pour combiner les colonnes de deux tables en se basant sur une ou plusieurs références mais ***en gardant toutes les lignes présentes dans la table située à gauche***.
@@ -378,7 +373,6 @@ Voici les éléments importants à prendre en compte :
378
373
- Toutes les lignes de la table `i` ont été gardées : l'entrée soda de `Products` ne correspond à aucune ligne de `ProductReceived` et fait encore partie des résultats.
379
374
- La ligne concernant `product_id = 6` ne fait plus partie des résultats car elle n'est pas présente dans la table `Products`.
380
375
381
-
382
376
#### 3.5.1. Jointure après des opérations sur les chaînes
383
377
384
378
Une des fonctionnalités clé de `data.table` est que l'on peut appliquer plusieurs opérations en chaînant les crochets, avant d'enregistrer le résultat final.
Utilisez cette méthode pour combiner les colonnes de deux tables en se basant sur une ou plusieurs références mais ***sans supprimer aucune ligne***.
@@ -506,20 +499,19 @@ merge(x = Products,
506
499
sort = FALSE)
507
500
```
508
501
509
-
510
502
## 4. Jointure de non équivalence
511
503
512
-
Une jointure de non équivalence est un type de jointure où la condition pour sélectionner les lignes n'est pas basée sur une égalité mais sur d'autres opérateurs de comparaison tels que <, >, <=, ou >=. Ceci permet des **critères plus flexibles de jointure**. Dans `data.table`, le jointures non équivalentes sont particulièrement utiles pour les opérations telles que :
504
+
Une jointure de non équivalence est un type de jointure où la condition pour sélectionner les lignes est basée sur des opérateurs de comparaison tels que <, >, <=, ou >= et qui sont autres que l'égalité. Ceci permet des **critères plus flexibles de jointure**. Dans `data.table`, les jointures non équivalentes sont particulièrement utiles pour les opérations telles que :
513
505
514
506
- Rechercher la correspondance la plus proche
515
507
- Comparer des intervalles de valeurs entre deux tables
516
508
517
-
C'est une alternative intéressante si, après avoir fait une jointure droite ou interne :
509
+
C'est une alternative intéressante quand, après avoir fait une jointure droite ou interne :
518
510
519
-
- Vous souhaitez diminuer le nombre de lignes renvoyées en fonction du résultat de la comparaison des colonnes numériques de tables différentes.
520
-
- Il n'est pas nécessaire de garder les colonnes de la table x *(data.table secondaire)* dans la table finale.
511
+
- Vous souhaitez réduire le nombre de lignes renvoyées en fonction du résultat de la comparaison des colonnes numériques des tables.
512
+
- Il n'est pas nécessaire de garder les colonnes de la table x *(`data.table` secondaire)* dans le résultat final.
521
513
522
-
Pour illustrer le fonctionnement, concentrons-nous sur les promotions et les réceptions de product 2.
514
+
Pour illustrer ce fonctionnement, concentrons-nous sur les promotions et les réceptions de product 2.
@@ -600,7 +592,6 @@ C'est utile lorsque vous avez besoin d'aligner des données de sources différen
600
592
601
593
Par exemple, avec des données financières, vous pourriez utiliser une jointure glissante pour assigner la valeur la plus récente d'une action à chaque transaction, même si les mises à jour du prix et les transactions ne correspondent pas exactement aux mêmes instants.
602
594
603
-
604
595
Dans notre exemple de supermarché nous pouvons utiliser une jointure glissante pour correspondre aux promotions avec les informations de produit les plus récentes.
605
596
606
597
Supposons que le prix des bananes et des carottes change le premier jour de chaque mois.
Comme nous venons de le voir, dans la section précédente la table `x` est filtrée par les valeurs de la table `i` . Actuellement cette méthode est plus rapide que de passer une expression booléenne dans l'argument `i`.
633
+
Comme nous venons de le voir, dans la section précédente la table `x` est filtrée par les valeurs de la table `i` . Cette méthode est plus rapide que de passer une expression booléenne dans l'argument `i`.
643
634
644
-
Pour filtrer la table `x` rapidement nous ne passons pas la`data.table` entière, nous pouvons passer une `list()` de vecteurs avec les valeurs de la table originale que nous voulons garder ou omettre.
635
+
Pour filtrer la table `x` rapidement nous n'avons pas besoin de passer une`data.table` entière, nous pouvons passer une `list()` de vecteurs avec les valeurs de la table originale que nous voulons garder ou omettre.
645
636
646
637
Par exemple pour filtrer les dates auxquelles le marché a reçu 100 unités de bananes (`product_id = 1`) ou de popcorn (`product_id = 3`) nous pouvons utiliser ceci :
Nous pouvons aussi utiliser cette technique pour filtrer toute combinaison de valeurs en les préfixant avec `!` pour obtenir la négation de l'expression dans l'argument `i` et en gardant le `nomatch` à sa valeur par défaut. Par exemple nous pouvons filtrer les deux lignes filtrées précédemment.
663
653
664
654
```{r}
@@ -677,17 +667,17 @@ Products[!"popcorn",
677
667
on = "name"]
678
668
```
679
669
680
-
### 7.2. Mise à jour par référence
670
+
### 6.2. Mise à jour par référence
681
671
682
672
L'opérateur `:=` de data.table est utilisé pour modifier des colonnes par référence (c'est à dire sans recopie) lors de la jointure. Syntaxe générale : `x[i, on=, (cols) := val]`.
683
673
684
-
**Mise à jour Simple un à un**
674
+
**Mise à jour simple un à un**
685
675
686
676
Mise à jour de `Products` avec les prix de `ProductPriceHistory` :
0 commit comments