Le post d’introduction suivant est destiné aux nouveaux utilisateurs de R. Il traite de la restructuration des données: ce qu’elle est et comment la réaliser à l’aide des fonctions de base R et du package {reshape}.
Ceci est un article invité du Dr Robert I. Kabacoff, le fondateur de (l’un des) premiers sites Web de tutoriels R en ligne: Quick-R. Kabacoff a récemment publié le livre « R in Action », qui fournit une présentation détaillée du langage R à partir de divers exemples pour illustrer les caractéristiques de R (manipulation de données, méthodes statistiques, graphiques, etc.). Le précédent message invité de Kabacoff a introduit des données.encadrez des objets dans R.
Pour les lecteurs de ce blog, il y a une réduction de 38% sur le livre « R en action » (ainsi que tous les autres livres électroniques, livres électroniques et MEAPs chez Manning publishing house), simplement en utilisant le code rblogg38 lors de la caisse.
Parlons maintenant de l’agrégation et de la restructuration des données en R:
Agrégation et restructuration
R fournit un certain nombre de méthodes puissantes pour agréger et remodeler les données. Lorsque vous agrégez des données, vous remplacez des groupes d’observations par des statistiques sommaires basées sur ces observations. Lorsque vous remodelez des données, vous modifiez la structure (lignes et colonnes) en déterminant l’organisation des données. Cet article décrit une variété de méthodes pour accomplir ces tâches.
Nous utiliserons la trame de données mtcars incluse dans l’installation de base de R. Cet ensemble de données, extrait du magazine Motor Trend (1974), décrit les caractéristiques de conception et de performance (nombre de cylindres, cylindrée, puissance, mpg, etc.) pour 34 automobiles. Pour en savoir plus sur l’ensemble de données, consultez Aide (mtcars).
Transposer
La transposition (inverser les lignes et les colonnes) est peut-être la méthode la plus simple pour remodeler un ensemble de données. Utilisez la fonction t() pour transposer une matrice ou une trame de données. Dans ce dernier cas, les noms de lignes deviennent des noms de variables (colonnes). Un exemple est présenté dans la liste suivante.
Listing 1 Transposer un jeu de données
Listing 1 utilise un sous-ensemble de l’ensemble de données mtcars afin de conserver de l’espace sur la page. Vous verrez une manière plus flexible de transposer les données lorsque nous examinerons le package reshape plus loin dans cet article.
Agréger des données
Il est relativement facile de réduire les données dans R en utilisant une ou plusieurs variables by et une fonction définie. Le format est
1 |
aggregate(x, by, FUN) |
où x est l’objet de données à réduire, by est une liste de variables qui seront croisées pour former les nouvelles observations, et FUN est la fonction scalaire utilisée pour calculer des statistiques récapitulatives qui constitueront les nouvelles valeurs d’observation.
À titre d’exemple, nous allons agréger les données mtcars par nombre de cylindres et d’engrenages, en renvoyant des moyennes sur chacune des variables numériques (voir la liste suivante).
Liste 2 Données agrégées
Dans ces résultats, Groupez.1 représente le nombre de cylindres (4, 6 ou et Groupe.2 représente le nombre d’engrenages (3, 4 ou 5). Par exemple, les voitures à 4 cylindres et 3 vitesses ont une moyenne de 21,5 miles par gallon (mpg).
Lorsque vous utilisez la fonction aggregate(), les variables by doivent être dans une liste (même s’il n’y en a qu’une). Vous pouvez déclarer un nom personnalisé pour les groupes à partir de la liste, par exemple en utilisant by=list(Group.cyl = cyl, Groupe.engrenages = engrenage).
La fonction spécifiée peut être n’importe quelle fonction intégrée ou fournie par l’utilisateur. Cela donne au commandement global beaucoup de puissance. Mais en matière de puissance, rien ne vaut le paquet reshape.
Le package reshape
Le package reshape est une approche extrêmement polyvalente pour la restructuration et l’agrégation d’ensembles de données. En raison de cette polyvalence, il peut être un peu difficile à apprendre.
Nous allons parcourir le processus lentement et utiliser un petit ensemble de données pour que ce qui se passe soit clair. Comme reshape n’est pas inclus dans l’installation standard de R, vous devrez l’installer une fois, en utilisant install.paquets (« remodeler »).
Fondamentalement, vous allez « fondre » les données afin que chaque ligne soit une combinaison unique d’ID-variable. Ensuite, vous « moulerez » les données fondues dans la forme que vous désirez. Pendant le casting, vous pouvez agréger les données avec n’importe quelle fonction que vous souhaitez. L’ensemble de données avec lequel vous travaillerez est indiqué dans le tableau 1.
Tableau 1 Le jeu de données d’origine (mydata)
ID |
Temps |
X1 |
X2 |
1 | 1 | 5 | 6 |
1 | 2 | 3 | 5 |
2 | 1 | 6 | 1 |
2 | 2 | 2 | 4 |
Dans cet ensemble de données, les mesures sont les valeurs des deux derniers colonnes (5, 6, 3, 5, 6, 1, 2, et 4). Chaque mesure est identifiée de manière unique par une combinaison de variables ID (dans ce cas, ID, Heure et si la mesure est sur X1 ou X2). Par example, la valeur mesurée 5 dans la première ligne est identifiée de manière unique en sachant qu’elle provient de l’observation (ID)1, à l’Instant 1, et sur la variable X1.
Fusion
Lorsque vous fondez un ensemble de données, vous le restructurez dans un format où chaque variable mesurée se trouve dans sa propre ligne, ainsi que les variables ID nécessaires pour l’identifier de manière unique. Si vous fondez les données du tableau 1, utilisez le code suivant
12 |
library(reshape)md <- melt(mydata, id=(c("id", "time"))) |
Vous vous retrouvez avec la structure indiquée dans le tableau 2.
Tableau 2 L’ensemble de données fondu
ID |
Temps |
Variable |
Valeur |
1 | 1 | X1 | 5 |
1 | 2 | X1 | 3 |
2 | 1 | X1 | 6 |
2 | 2 | X1 | 2 |
1 | 1 | X2 | 6 |
1 | 2 | X2 | 5 |
2 | 1 | X2 | 1 |
2 | 2 | X2 | 4 |
Notez que vous devez spécifier les variables nécessaires pour identifier de manière unique chaque mesure (ID et Heure) et que la variable indiquant les noms des variables de mesure (X1 ou X2) est créée automatiquement pour vous.
Maintenant que vous avez vos données sous une forme fondue, vous pouvez les refondre dans n’importe quelle forme, en utilisant la fonction cast().
Casting
La fonction cast() commence avec des données fondues et les remodèle à l’aide d’une formule que vous fournissez et d’une fonction (facultative) utilisée pour agréger les données. Le format est
1 |
newdata <- cast(md, formula, FUN) |
Où md est les données fondues, formula décrit le résultat final souhaité, et FUN est la fonction d’agrégation (facultative). La formule prend la forme
1 |
rowvar1 + rowvar2 + … ~ colvar1 + colvar2 + … |
Dans cette formule, rowvar1 + rowvar2+ define définit l’ensemble des variables croisées qui définissent les lignes, et colvar1+ colvar2+ define définit l’ensemble des variables croisées qui définissent les colonnes. Voir les exemples de la figure 1. (cliquez pour agrandir l’image)
Figure 1 Remodelage des données avec les fonctions melt() et cast()
Étant donné que les formules du côté droit (d, e et f) n’incluent pas de fonction, les données sont remodelées. En revanche, les exemples sur le côté gauche (a, b et c) spécifient la moyenne en tant que fonction d’agrégation. Ainsi, les données sont non seulement remodelées, mais également agrégées. Par exemple, (a) donne les moyennes sur X1 et X2 moyennées dans le temps pour chaque observation. L’exemple (b) donne les scores moyens de X1 et X2 au Temps 1 et au Temps 2, moyennés sur les observations. En (c), vous avez le score moyen pour chaque observation au Temps 1 et au Temps 2, moyenné sur X1 et X2.
Comme vous pouvez le voir, la flexibilité fournie par les fonctions melt() et cast() est incroyable. Il y a de nombreuses fois où vous devrez remodeler ou agréger vos données avant l’analyse. Par exemple, vous devrez généralement placer vos données dans ce qu’on appelle un format long ressemblant au tableau 2 lors de l’analyse des données de mesures répétées (données où plusieurs mesures sont enregistrées pour chaque observation).
Résumé
Le chapitre 5 de R en action passe en revue plusieurs des dizaines de fonctions mathématiques, statistiques et probabilités utiles pour manipuler des données. Dans cet article, nous avons brièvement exploré plusieurs façons d’agréger et de restructurer les données.
Cet article est apparu pour la première fois en tant que chapitre 5.6 du livre « R en action », et est publié avec la permission de la maison d’édition Manning. D’autres livres de ce sérieux qui pourraient vous intéresser sont (voir le début de cet article pour un code de réduction):
- L’apprentissage automatique en action par Peter Harrington
- Gnuplot en action (Comprendre les données avec des graphiques) par Philipp K. Janert