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 :

Manipulation de dates


Sujet :

R

  1. #1
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Février 2013
    Messages : 27
    Points : 24
    Points
    24
    Par défaut Manipulation de dates
    Bonjour,

    J'ai le jeu de données suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ID date.preco	dose.preco date.apport	dose.apport
    1	24/04/2015	60	19/05/2015	30
    1	24/04/2015	60	28/04/2015	40
    2	29/04/2015	40	19/05/2015	30
    2	29/04/2015	40	28/04/2015	40
    3	26/04/2015	90	19/05/2015	30
    3	26/04/2015	90	15/05/2015	54
    Et je voudrais obtenir celui la :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ID	date.preco	dose.preco	date.apport	dose.apport
    1	24/04/2015	60	28/04/2015	70
    2	29/04/2015	40	28/04/2015	70
    3	26/04/2015	90	15/05/2015	84
    Je ne veux garder que la date.apport la plus récente pour chaque ID, et je veux faire la somme des dose.apport pour chaque ID.

    J'ai essayé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    somme_dose<-na.omit(as.matrix(tapply(data$dose.apport,data$ID,sum)))
    min_date<-na.omit(as.matrix(tapply(data$date.apport,data$ID,min)))
    Autant pour la somme ça à l'air de fonctionner mais pour les dates ça ne marche pas, et je me perds.

    Est-ce qu'il n'y aurait pas une façon simple de le faire ?

    Un coup de main ne me ferait pas de mal !

    Merci par avance.

    Virginie

  2. #2
    Modératrice

    Femme Profil pro
    Statisticienne, Fondatrice de la société DACTA
    Inscrit en
    Juin 2010
    Messages
    893
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Statisticienne, Fondatrice de la société DACTA

    Informations forums :
    Inscription : Juin 2010
    Messages : 893
    Points : 2 673
    Points
    2 673
    Par défaut
    Bonjour,

    Un package R très utile pour la manipulation de données : dplyr. Il est d'ailleurs tout particulièrement indiqué pour votre cas particulier.
    Une aide fort précieuse pour l'utilisation de ce package data-wrangling-cheatsheet.pdf.

    Voici donc une solution :

    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
    # Chargement du package "dplyr", à installer éventuellement avant ;)
     
    library(dplyr)
     
    # Création du jeu de données initiales
     
    data_ini <- data_frame(ID = c(1, 1, 2, 2, 3, 3), date.preco = c("24/04/2015", "24/04/2015", "29/04/2015", "29/04/2015", "26/04/2015", "26/04/2015"), dose.preco = c(60, 60, 40, 40, 90, 90), date.apport = c("19/05/2015", "28/04/2015", "19/05/2015", "28/04/2015", "19/05/2015", "15/05/2015"), dose.apport =  c(30, 40, 30, 40, 30, 54))
     
     
    # Transformation du format de la variable "date.apport" en "date" (si cela n'est pas fait au chargement des données), pour pouvoir récupérer facilement la date la plus récente
     
    data_ini_2 <- data_ini %>% mutate(date.apport = as.Date(date.apport, format = "%d/%m/%Y"))
     
     
    # Création du jeu de données finales : on fait un regroupement par ID, puis on récupère la 1ère valeur pour les variables "date.preco" et "dose.preco" (car toutes identiques), la date la plus petite pour "date.apport" et la somme pour "dose.apport"
     
    data_final <- data_ini_2 %>% group_by(ID) %>% summarize(date.preco = first(date.preco), dose.preco = first(dose.preco), data.apport = min(date.apport), dose.apport = sum(dose.apport))
    Votre approche n'était cependant pas forcément mauvaise, mais je pense que le problème venait sûrement du type de votre variable de date, d'où l'incapacité de R à en trouver le minimum.


    Bonne continuation


    Cordialement,


    A.D.

    Forum R
    Fournir le code utilisé (pensez aux balises code !), les packages nécessaires, ainsi qu'un court mais représentatif extrait du jeu de données et les éventuels messages d'erreur.
    Recherche d'informations concernant R : RSiteSearch / tutoriels : http://r.developpez.com/cours/ .

    Pensez également au bouton "Résolu" et à voter (en bas à droite des messages) lorsque vous avez obtenu une réponse satisfaisante.

  3. #3
    Membre à l'essai
    Femme Profil pro
    Étudiant
    Inscrit en
    Février 2013
    Messages
    27
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Février 2013
    Messages : 27
    Points : 24
    Points
    24
    Par défaut
    En effet, il a l'air vraiment pratique ce package : comment résoudre mon problème en une seule ligne

    Merci de votre aide.

    Virginie

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

Discussions similaires

  1. Manipulations de dates et heures
    Par benj63 dans le forum C++
    Réponses: 5
    Dernier message: 16/12/2004, 15h09
  2. [JDBC] manipulation des dates/heures en Java
    Par kurkLord dans le forum JDBC
    Réponses: 6
    Dernier message: 09/08/2004, 12h49
  3. Manipulations des Dates
    Par kurtc dans le forum Langage SQL
    Réponses: 11
    Dernier message: 13/04/2004, 14h39
  4. [IB6][BCB5]Manipulation des dates.
    Par Sitting Bull dans le forum SQL
    Réponses: 4
    Dernier message: 09/04/2004, 15h33
  5. Manipuler des dates...
    Par Ti Jen-tsie dans le forum Langage
    Réponses: 4
    Dernier message: 26/06/2003, 11h46

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