extraire les données d'un tableau croisé

Postez ici vos questions, réponses, commentaires ou suggestions - Les sujets seront ultérieurement répartis dans les archives par les modérateurs

Modérateur : Groupe des modérateurs

Maxime Florent
Messages : 3
Enregistré le : 22 Mar 2017, 07:23

extraire les données d'un tableau croisé

Messagepar Maxime Florent » 24 Mar 2017, 10:54

Bonjour,

J'ai un fichier csv de débit journalier (cf. pièce jointe) rangés dans une succession de tableaux croisés. Les valeurs de débit journalier pour une année sont rangées dans un tableau croisé où chaque colonne représente le mois et où chaque ligne correspond aux jours dans le mois. Je souhaiterais donc extraire les données de chaque tableau croisé de telle sorte que j'obtienne deux colonnes, une pour la date et une autre pour le débit. Pouvez-vous m'aider dans ma démarche ?

Je vous remercie.

[attachment]C:\Users\florenma\Desktop\Qj[/attachment]

Michaël Delorme
Messages : 67
Enregistré le : 04 Avr 2016, 10:21

Re: extraire les données d'un tableau croisé

Messagepar Michaël Delorme » 24 Mar 2017, 11:20

(le fichier joint n'était pas lisible)

Code : Tout sélectionner

library(tidyverse)

# génération d'un jeu de données (seulement 4 mois pour l'exemple)
(table_debit <- tibble(jour = seq(1:31),
                        `01` = rnorm(31),
                        `02` = rnorm(31),
                        `03` = rnorm(31),
                        `12` = rnorm(31)))                     


Tu as qqchose comme ça ?

Code : Tout sélectionner

# A tibble: 31 × 5
    jour        `01`       `02`       `03`        `12`
   <int>       <dbl>      <dbl>      <dbl>       <dbl>
1      1 -0.40205954 -0.3690294  0.5932545  0.55900424
2      2  1.02443097  0.2430464 -2.8740683 -0.09662251
3      3 -0.73296736 -1.5731528  0.9611914  0.16365367
4      4 -0.47585555  0.5382824  1.0877442 -0.54143659
5      5 -0.04487882  0.8149758 -0.8289221 -0.61527607
6      6 -1.14516447  0.3798923 -0.1241146  1.67664265
7      7 -1.17862444  0.8073241  0.6052208  0.01084477
8      8  1.86010635  2.1979071  0.4478643  1.78628453
9      9  1.04791377 -1.0724803  1.6552977 -2.61166296
10    10  0.67775100  0.3316621  0.9964944  0.96152846
# ... with 21 more rows


Il suffit alors de mettre toutes les données de débit dans une colonne (gather), puis de fusionner (unite) les colonnes jour et mois ; par exemple :

Code : Tout sélectionner

table_debit %>%
   gather(mois, debit, -jour) %>%
   unite(jour, mois, col = "date", sep = "/")


qui donne :

Code : Tout sélectionner

# A tibble: 124 × 2
    date       debit
*  <chr>       <dbl>
1   1/01 -0.40205954
2   2/01  1.02443097
3   3/01 -0.73296736
4   4/01 -0.47585555
5   5/01 -0.04487882
6   6/01 -1.14516447
7   7/01 -1.17862444
8   8/01  1.86010635
9   9/01  1.04791377
10 10/01  0.67775100
# ... with 114 more rows

Maxime Florent
Messages : 3
Enregistré le : 22 Mar 2017, 07:23

Re: extraire les données d'un tableau croisé

Messagepar Maxime Florent » 24 Mar 2017, 12:59

Veuillez m’excuser il semble que le fichier .xls n'est pas été joint au message. Je vous envoie un lien pour pouvoir le télécharger.
https://xls.lu/3zJa/
https://www.fichier-xls.fr/2017/03/24/qj/

Je vous remercie par ailleurs pour votre réponse qui me permet d'avancer dans ma recherche. Je cherche désormais un moyen de réitérer l'opération d'extraction des données pour chaque tableau croisé (en sachant qu'un tableau croisé correspond à une année), afin de ranger dans l'ordre chronologique les données de débit dans un data frame. Je pense devoir utiliser une boucle ou la fonction merge, mais je n'ai pas trop d'indication là-dessus. Auriez-vous éventuellement quelques conseils à me donner ?

Michaël Delorme
Messages : 67
Enregistré le : 04 Avr 2016, 10:21

Re: extraire les données d'un tableau croisé

Messagepar Michaël Delorme » 24 Mar 2017, 14:49

Un peu de nettoyage dans votre fichier et il suffit d'ajouter la colonne année et que les tableaux croisés soient assemblés les uns à la suite des autres :

Code : Tout sélectionner

(table_debit <- tibble(annee = rep('2016', 31),
                         jour = seq(1:31),
                        `01` = rnorm(31),
                        `02` = rnorm(31),
                        `03` = rnorm(31),
                        `12` = rnorm(31)))
# A tibble: 31 × 6
   annee  jour       `01`        `02`        `03`       `12`
   <chr> <int>      <dbl>       <dbl>       <dbl>      <dbl>
1   2016     1 -0.9096694 -0.39545756  1.82289353  1.0251359
2   2016     2  0.6887897 -0.16575583  1.42805520 -0.9606005
3   2016     3 -0.7794163  0.08633119 -1.06344524  1.1882702
4   2016     4  0.4391712 -0.04559772  0.29217827  0.4254283
5   2016     5 -2.0819705  0.70807411 -0.57285473 -2.1891984
6   2016     6 -1.0765729  0.20222205  1.63799727 -0.1744921
7   2016     7 -1.8360866 -0.15156669  0.59512492 -0.7065472
8   2016     8  0.6102541 -1.25037750 -0.09696052 -0.5977184
9   2016     9 -0.4335171  1.50020684 -0.79634106  0.3223789
10  2016    10  0.1602306  1.94375690 -0.64632586 -0.7927383


Puis de faire la même chose qu'avant en prenant cette fois en compte l'année :

Code : Tout sélectionner

table_debit %>%
   gather(mois, debit, -c(jour, annee)) %>%
   unite(jour, mois, annee, col = "date", sep = "/")
   
   
# A tibble: 124 × 2
         date      debit
*       <chr>      <dbl>
1   1/01/2016 -0.9096694
2   2/01/2016  0.6887897
3   3/01/2016 -0.7794163
4   4/01/2016  0.4391712
5   5/01/2016 -2.0819705
6   6/01/2016 -1.0765729
7   7/01/2016 -1.8360866
8   8/01/2016  0.6102541
9   9/01/2016 -0.4335171
10 10/01/2016  0.1602306
# ... with 114 more rows

Maxime Florent
Messages : 3
Enregistré le : 22 Mar 2017, 07:23

Re: extraire les données d'un tableau croisé

Messagepar Maxime Florent » 24 Mar 2017, 15:40

Je vous remercie pour ces explications qui m'ont particulièrement bien aidé.


Retourner vers « Questions en cours »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 1 invité