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
Voir `?dcast` pour d'autres arguments utiles et des exemples supplémentaires.
136
136
137
-
## 2. Limitations des approches actuelles`melt/dcast`
137
+
## 2. Limitations des approches précédentes`melt/dcast`
138
138
139
139
Jusqu'à présent, nous avons vu des fonctionnalités de `melt` et `dcast` qui sont implémentées efficacement pour les objets `data.table`, en utilisant la machinerie interne de `data.table` (*tri par base rapide*, *recherche binaire* etc...).
140
140
141
141
Cependant, il existe des situations où l'opération souhaitée ne s'exprime pas de manière simple. Par exemple, considérons l'objet `data.table` présenté ci-dessous :
Et vous aimeriez combiner (avec `melt`) toutes les colonnes `dob` ensemble, ainsi que toutes les colonnes `gender` ensemble. Avec la fonctionnalité actuelle, nous pouvons faire quelque chose comme ceci :
155
+
Et vous aimeriez combiner (avec `melt`) toutes les colonnes `name` ensemble, ainsi que toutes les colonnes `gender` ensemble. Avec les anciennes fonctionnalités, nous pouvions faire quelque chose comme ceci :
@@ -166,11 +165,11 @@ str(DT.c1) ## la colonne 'gender' est un type de caractère maintenant !
166
165
167
166
#### Problèmes
168
167
169
-
1. Ce que nous voulions faire était de combiner toutes les colonnes de type `dob` ensemble, et toutes les colonnes de type `gender` ensemble. Au lieu de cela, nous combinons tout, puis nous les scindons à nouveau. On voit aisément que c'est une approche détournée (et inefficace).
168
+
1. Ce que nous voulions faire était de combiner toutes les colonnes de type `name` ensemble, et toutes les colonnes de type `gender` ensemble. Au lieu de cela, nous combinons tout, puis nous les scindons à nouveau. On voit aisément que c'est une approche détournée (et inefficace).
170
169
171
170
Comme analogie, imaginez un placard avec quatre étagères de vêtements, et vous souhaitez rassembler les vêtements des étagères 1 et 2 (dans l'étagère 1), et ceux des étagères 3 et 4 (dans l'étagère 3). Ce que nous faisons, en quelque sorte, c'est de mélanger tous les vêtements ensemble, puis de les séparer à nouveau sur les étagères 1 et 3 !
172
171
173
-
2. Les colonnes à transformer (`melt`) peuvent être de types différents, comme c'est le cas ici (types `character` et `integer`). En les transformant toutes ensemble avec `melt`, les colonnes seront forcées d'être du même type, comme l'explique le message d'avertissement ci-dessus, et on le voit dans la sortie de str(DT.c1), où la colonne `gender` a été convertie en type `character`.
172
+
2. Les colonnes à transformer (`melt`) peuvent être de types différents. En les transformant toutes ensemble avec `melt`, elles seront forcées d'être du même type.
174
173
175
174
3. Nous générons une colonne supplémentaire en scindant la colonne variable en deux colonnes, dont l'utilité est plutôt obscure. Nous faisons cela parce que nous en avons besoin pour la transformation (`cast`) dans l'étape suivante.
176
175
@@ -189,9 +188,9 @@ Puisque nous aimerions que `data.table` effectue cette opération de façon simp
189
188
L'idée est assez simple. Nous passons une liste de colonnes à `measure.vars`, où chaque élément de la liste contient les colonnes qui doivent être combinées ensemble.
@@ -206,7 +205,7 @@ str(DT.m2) ## le type de col est préservé
206
205
En général, dans ce type de problème, les colonnes que l'on souhaite transformer avec `melt` peuvent être distinguées par un motif commun. Nous pouvons utiliser la fonction `patterns()`, implémentée pour faciliter cette tâche, pour fournir des expressions régulières correspondant aux colonnes à combiner ensemble. L'opération ci-dessus peut alors être réécrite comme suit :
0 commit comments