IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

R Discussion :

mise en forme d'un tableau


Sujet :

R

  1. #1
    Membre régulier
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Octobre 2015
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Octobre 2015
    Messages : 101
    Points : 70
    Points
    70
    Par défaut mise en forme d'un tableau
    Bonjour,

    j'ai un tableau de données (fichier joint) qui regroupe dans une colonne des dates et des heures et une deuxième colonne ma variable, je souhaite mettre en forme ce tableau en faisant la somme de la variable pour chaque mois de chaque année. Au final je souhaite obtenir un tableau comme celui-la:
    années 1 2 3 4 5 6 7 8 9 10 11 12
    2015 x1 x2 x3 x4 x5
    2016
    2017

    où les numéros de la première ligne correspondent aux mois de l'année, xn à la somme de la variable de l'année et le mois respectifs.

    Merci d'avance pour votre aide.
    Fichiers attachés Fichiers attachés

  2. #2
    Membre confirmé
    Inscrit en
    Février 2011
    Messages
    276
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 276
    Points : 561
    Points
    561
    Par défaut
    Bonjour,

    Une solution parmi d'autres avec les librairies dplyr et tidyr :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    library(dplyr)
    library(tidyr)
    # d'abord j'ouvre ton fichier excel et je copie colle les données
    # ensuite dans R je l'importe via la commande suivante :
    tab <- read.table("clipboard", sep = "\t", h = T, dec = ",", stringsAsFactors = FALSE)
     
    # je transforme la première colonne au format temps
    tab$date.Heure.locale <- as.POSIXct(tab$date.Heure.locale, format = "%d.%m.%Y %H:%M")
    # pas forcément nécessaire on peut passer par des chaînes de caractères
     
    tab %>% mutate(Annee = format(date.Heure.locale, "%Y"), Mois = format(date.Heure.locale, "%m")) %>% # ici on crée une colonne pour les années et l'autre pour les mois
      group_by(Annee, Mois) %>% summarise(RRR = sum(RRR)) %>% # ici on regroupe les données RRR par Année et par mois et on les somme
      spread(Mois, RRR) # ici on passe d'un format long des données à un format large avec les  années en ligne, les mois en colonne et les sommes à l'intersection des deux
    Source: local data frame [2 x 13]
    Groups: Annee [2]
     
      Annee  `01`  `02`   `03`   `04`  `05`  `06`   `07`  `08`  `09`  `10`  `11`   `12`
    * <chr> <dbl> <dbl>  <dbl>  <dbl> <dbl> <dbl>  <dbl> <dbl> <dbl> <dbl> <dbl>  <dbl>
    1  2016 44.49 18.92 186.81 112.60 32.00 43.90 156.46 93.04 98.05 27.46 43.33 107.02
    2  2017 40.73  3.00  36.73  59.66 72.23 79.11  46.01 96.80 11.62  7.74 73.70  40.67
    Une autre solution avec les fonctions de bases de R :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    tab$Annee <- format(tab$date.Heure.locale, "%Y")
    tab$mois <- format(tab$date.Heure.locale, "%m")
    tab2 <- aggregate(RRR ~ Annee + mois, tab, sum)
    reshape(tab2, timevar = "mois", idvar = "Annee", direction = "wide")
      Annee RRR.01 RRR.02 RRR.03 RRR.04 RRR.05 RRR.06 RRR.07 RRR.08 RRR.09 RRR.10 RRR.11 RRR.12
    1  2016  44.49  18.92 186.81 112.60  32.00  43.90 156.46  93.04  98.05  27.46  43.33 107.02
    2  2017  40.73   3.00  36.73  59.66  72.23  79.11  46.01  96.80  11.62   7.74  73.70  40.67
    Cdlt

  3. #3
    Membre régulier
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Octobre 2015
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Octobre 2015
    Messages : 101
    Points : 70
    Points
    70
    Par défaut
    Merci tototode pour ta réponse rapide, cependant j'ai quelques soucis.

    Je n'arrive pas à copier coller le fichier comme tu le préconise

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    khenchelaP <- read.table("clipboard", sep="\t", header=TRUE, dec=",", stringsAsFactors=FALSE)
    Warning message:
    In read.table("clipboard", sep = "\t", header = TRUE, dec = ",",  :
      incomplete final line found by readTableHeader on 'clipboard'
    alors j'ai importé le csv, tout fonctionne correctement jusqu'à la fonction summarise:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    library(dplyr)
    library(tidyr)
    khenchelaP <- read.table("brut.csv", sep="\t",header=TRUE, dec=",", stringsAsFactors=FALSE)
    View(khenchelaP)
    khenchelaP$date.Heure.locale <- as.POSIXct(khenchelaP$date.Heure.locale, format="%d.%m.%Y %H:%M")
    khenchelaP %>% mutate(Annee = format(date.Heure.locale, "%Y"), Mois = format(date.Heure.locale, "%m")) %>%
    group_by(Annee, Mois) %>% summarise(RRR = sum(RRR)) %>%
    spread(Mois, RRR)
    Error in summarise_impl(.data, dots) : 
      Evaluation error: object 'RRR' not found.
    alors j'ai remplacé l'argument sep="\t" par sep=";" pour avoir la variable RRR dans une colonne le message suivant s'affiche

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Error in summarise_impl(.data, dots) : 
      Evaluation error: invalid 'type' (character) of argument.
    avec la deuxième solution c'est la fonction aggregate qui donne le même messager d'erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    khenchelaP$Annee <- format(tab$date.Heure.locale, "%Y")
    khenchelaP$mois <- format(tab$date.Heure.locale, "%m")
    tab2 <- aggregate(RRR ~ Annee + mois, khenchelaP, sum)
    Error in eval(predvars, data, env) : object 'RRR' not found
    je remplace l'argument sep="\t"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Error in FUN(X[[i]], ...) : invalid 'type' (character) of argument
    j'ai dû transformer RRR en données numériques comme suit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    khenchelaP$P<-as.numeric(as.character(khenchelaP$RRR))
    ainsi le code final est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    library(dplyr)
    library(tidyr)
    khenchelaP <- read.table("brut.csv", sep=";",header=TRUE, dec=",", stringsAsFactors=FALSE)
    khenchelaP$date.Heure.locale <- as.POSIXct(khenchelaP$date.Heure.locale,
                                               format="%d.%m.%Y %H:%M")
    khenchelaP$P<-as.numeric(as.character(khenchelaP$RRR))
     
    P_khenchela<-{khenchelaP%>%mutate(Annee=format(date.Heure.locale, "%Y"), 
                   Mois = format(date.Heure.locale, "%m")) %>%
    group_by(Annee, Mois) %>% summarise(P=sum(P)) %>%
    spread(Mois, P)}
    et ça marche.

    par contre la deuxième solution donne la somme de P et non la somme par mois et année

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    khenchelaP$Annee <- format(tab$date.Heure.locale, "%Y")
    khenchelaP$mois <- format(tab$date.Heure.locale, "%m")
    tab2 <- aggregate(P ~ Annee + mois, khenchelaP, sum)
    tab2
    Annee mois       P
    1  NULL NULL 1532.08

  4. #4
    Membre confirmé
    Inscrit en
    Février 2011
    Messages
    276
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 276
    Points : 561
    Points
    561
    Par défaut
    re,

    dans la commande d'import du tableau j'avais utilisé dec = "," parce que dans mes paramètres régionaux le séparateur décimal est la virgule. Si dans ton fichier excel les décimales de la colonne RRR sont des points alors tu enlèves cet argument de la commande read.table("clipboard", ...).
    Dans le fichier que tu as joint la deuxième colonne s'appelle RRR mais si dans ton tableau elle s'appelle P alors oui il te faut remplacer RRR par P.
    De même si tu lis le fichier directement à partir de son nom/chemin alors il te faut aussi ajuster le séparateur (argument sep) en fonction de celui qui a été utilisé pour construire ce fichier. En général avec le csv c'est soit un point virgule, ou une virgule.

    cdlt

  5. #5
    Membre régulier
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Octobre 2015
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant Chercheur

    Informations forums :
    Inscription : Octobre 2015
    Messages : 101
    Points : 70
    Points
    70
    Par défaut
    Dans le fichier que tu as joint la deuxième colonne s'appelle RRR mais si dans ton tableau elle s'appelle P alors oui il te faut remplacer RRR par P
    la deuxième colonne s'appelle bien RRR sauf qu'à l'importation du csv, celle-ci est de type "character", j'ai dû transformer RRR en "numeric" en ajoutant une nouvelle colonne que j'ai appelé P.

    merci pour tout
    à bientôt.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Changer la mise en forme d'un tableau et de son contenu ?
    Par ghohm dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 06/07/2007, 12h19
  2. [MS-Project] Mise en forme d'un tableau
    Par babemagus dans le forum Autres Logiciels
    Réponses: 3
    Dernier message: 06/06/2007, 15h56
  3. [XSLT]Mise en forme d'un tableau par categorie
    Par dibox dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 06/12/2006, 16h42
  4. [ struts-layout ]Mise en forme d'un tableau
    Par sandrinec dans le forum Struts 1
    Réponses: 2
    Dernier message: 01/06/2006, 10h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo