Skip to content

Commit fae27ca

Browse files
authored
Update datatable-joins.Rmd #7220 aligned
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
1 parent 29c3a7b commit fae27ca

File tree

1 file changed

+24
-34
lines changed

1 file changed

+24
-34
lines changed

vignettes/fr/datatable-joins.Rmd

Lines changed: 24 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -65,7 +65,6 @@ NewTax = data.table(
6565
NewTax
6666
```
6767

68-
6968
3. `ProductReceived`, une table dont les lignes simulent l'inventaire des ventes hebdomadaires.
7069

7170
```{r define_product_received}
@@ -95,7 +94,7 @@ possible_weekdays <- as.IDate(sapply(receipt_dates, `+`, 0:4))
9594
ProductSales = data.table(
9695
id = 1:10,
9796
date = sort(sample(possible_weekdays, 10L)),
98-
product_id = sample(c(1:3, 7L), size = 10L, replace = TRUE), # NB: product '7' is in neither Products nor ProductReceived.
97+
product_id = sample(c(1:3, 7L), size = 10L, replace = TRUE), # NB: product '7' n'est ni Products ni ProductReceived.
9998
count = sample(c(50L, 100L, 150L), size = 10L, replace = TRUE)
10099
)
101100
@@ -146,8 +145,8 @@ Products[ProductReceived,
146145
Comme beaucoup de choses ont changé, nous allons expliquer les nouvelles caractéristiques dans les groupes suivants :
147146

148147
- **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`.
151150
- 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`).
152151

153152
- **Niveau ligne**
@@ -169,7 +168,7 @@ Products[ProductReceived,
169168
on = list(id = product_id)]
170169
```
171170

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`.
173172

174173
```{r, eval=FALSE}
175174
Products[ProductReceived,
@@ -203,7 +202,7 @@ ProductsKeyed[ProductReceivedKeyed]
203202

204203
#### 3.1.3. Opérations après la jointure
205204

206-
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 :
207206

208207
- Chaîner une nouvelle instruction en ajoutant une paire de crochets `[]`.
209208
- En passant comme argument `j` une liste des colonnes que l'on veut conserver ou créer.
@@ -233,12 +232,11 @@ Products[
233232
]
234233
```
235234

236-
237-
##### Résumer avec`on` dans `data.table`
235+
##### Résumer avec `on` dans `data.table`
238236

239237
Nous pouvons aussi utiliser cette alternative pour renvoyer les résultats agrégés en fonction des colonnes présentes dans la table `x` .
240238

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.
242240

243241
```{r}
244242
dt1 = ProductReceived[
@@ -248,7 +246,7 @@ dt1 = ProductReceived[
248246
j = .(total_value_received = sum(price * count))
249247
]
250248
251-
# alternative using multiple [] queries
249+
# alternative utilisant plusieurs requêtes []
252250
dt2 = ProductReceived[
253251
Products,
254252
on = c("product_id" = "id"),
@@ -261,7 +259,7 @@ identical(dt1, dt2)
261259

262260
#### 3.1.4. Jointure basée sur plusieurs colonnes
263261

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.
265263

266264
Pour illustrer cela supposons que nous voulions ajouter `tax_prop` de `NewTax` pour **mettre à jour** la table `Products`.
267265

@@ -273,7 +271,7 @@ NewTax[Products, on = c("unit", "type")]
273271

274272
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***.
275273

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.
277275

278276
```{r}
279277
# First Table
@@ -316,15 +314,14 @@ Dans ce cas l'opération renvoie la ligne de `product_id = 6,` car il ne figure
316314

317315
### 3.4. Semi jointure
318316

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.
320318

321319
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 :
322320

323321
- Chaque ligne de la table `x` est dupliquée à cause de la duplication des lignes dans la table passée dans l'argument `i`.
324322

325323
- Toutes les lignes renommées de `x` doivent conserver l'ordre originel des lignes.
326324

327-
328325
Pour faire ceci, suivez les étapes ci-après :
329326

330327
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` .
@@ -348,14 +345,12 @@ SubSetRowsSorted = sort(unique(SubSetRows))
348345
SubSetRowsSorted
349346
```
350347

351-
352348
3. Sélectionner les lignes `x` à garder.
353349

354350
```{r}
355351
Products[SubSetRowsSorted]
356352
```
357353

358-
359354
### 3.5. Jointure gauche
360355

361356
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 :
378373
- 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.
379374
- La ligne concernant `product_id = 6` ne fait plus partie des résultats car elle n'est pas présente dans la table `Products`.
380375

381-
382376
#### 3.5.1. Jointure après des opérations sur les chaînes
383377

384378
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.
@@ -488,7 +482,6 @@ AllProductsMix[, temp_id := NULL]
488482
AllProductsMix[, !c("type", "i.type")]
489483
```
490484

491-
492485
### 3.7. Jointure complète
493486

494487
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,
506499
sort = FALSE)
507500
```
508501

509-
510502
## 4. Jointure de non équivalence
511503

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 :
513505

514506
- Rechercher la correspondance la plus proche
515507
- Comparer des intervalles de valeurs entre deux tables
516508

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 :
518510

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.
521513

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.
523515

524516
```{r}
525517
ProductSalesProd2 = ProductSales[product_id == 2L]
@@ -600,7 +592,6 @@ C'est utile lorsque vous avez besoin d'aligner des données de sources différen
600592

601593
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.
602594

603-
604595
Dans notre exemple de supermarché nous pouvons utiliser une jointure glissante pour correspondre aux promotions avec les informations de produit les plus récentes.
605596

606597
Supposons que le prix des bananes et des carottes change le premier jour de chaque mois.
@@ -635,13 +626,13 @@ ProductPriceHistory[ProductSales,
635626
j = .(product_id, date, count, price)]
636627
```
637628

638-
## 7. Avantage de la vitesse de jointure
629+
## 6. Avantage de la vitesse de jointure
639630

640-
### 7.1. Sous-ensembles en tant que jointures
631+
### 6.1. Sous-ensembles en tant que jointures
641632

642-
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`.
643634

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.
645636

646637
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 :
647638

@@ -658,7 +649,6 @@ ProductReceived[list(c(1L, 3L), 100L),
658649
nomatch = NULL]
659650
```
660651

661-
662652
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.
663653

664654
```{r}
@@ -677,17 +667,17 @@ Products[!"popcorn",
677667
on = "name"]
678668
```
679669

680-
### 7.2. Mise à jour par référence
670+
### 6.2. Mise à jour par référence
681671

682672
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]`.
683673

684-
**Mise à jour Simple un à un**
674+
**Mise à jour simple un à un**
685675

686676
Mise à jour de `Products` avec les prix de `ProductPriceHistory` :
687677

688678
```{r}
689-
Products[ProductPriceHistory,
690-
on = .(id = product_id),
679+
Products[ProductPriceHistory,
680+
on = .(id = product_id),
691681
price := i.price]
692682
693683
Products

0 commit comments

Comments
 (0)