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 :

Problèmes données data.frame


Sujet :

R

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 11
    Points : 9
    Points
    9
    Par défaut Problèmes données data.frame
    Bonjour !

    Je suis confronté à un data.frame qui me pose soucis. Je dispose de données de hauteurs d'eau (3ème colonne) en fonction du temps (1ère et 2ème colonnes), rangées chronologiquement par pas de temps variables.

    ex:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    20000801  00:30  20.4
    20000801  07:42  25.2
    20000801  18:15  23.5
    20000802  01:12  27.1
    20000802  16:40  29.2
    20000803  00:51  30.5
    20000803  06:17  33.4 
    20000803  13:32  31.3
    20000803  21:14  31.2
    20000804  02:15  33.2
    20000804  12:20  34.5
    20000804  22:10  36.2
    20000805  03:00  34.0 
    20000805  23:00  32.5
    J'ai donc un data.frame de trois colonnes (1ère colonne: année, mois, jour). A la place d'avoir plusieurs valeurs par jour, j'aimerais avoir UNE valeur journalière. La méthode la plus simple serait de faire la moyenne des valeurs pour chaque jour. Pour être vraiment exact, il faudrait pondérer par les pas de temps variables, mais je ne veux pas non plus vous en demander trop numériquement...

    Du coup en moyennant simplement les valeurs horaires de chaque jour sans tenir compte des pas de temps variables, j'aimerais arriver à ça en reprenant l'exemple ci-dessus:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    20000801  23.03
    20000802  28.15
    20000803  31.60
    20000804  34.63
    20000805  33.25
    Lors de mon dernier post, ced m'a donné un outil très puissant "data.table" permettant de trier des data.frame. Je peux supposer que cet outil est capable de lire les dates de la 1ère colonne et alors trier les données en prenant en compte cette info. Mais je n'ai pas réussi à trouver de doc pertinente sur data.table. :s

    Merci d'avance pour toute aide donnée !

  2. #2
    Membre averti
    Femme Profil pro
    Inscrit en
    Septembre 2009
    Messages
    272
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 272
    Points : 417
    Points
    417
    Par défaut
    Bonsoir,

    pourquoi ne pas utiliser simplement l'une de ses deux fonctions:Bonne continuation

  3. #3
    Inactif  
    Profil pro
    " "
    Inscrit en
    Janvier 2008
    Messages
    330
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : " "

    Informations forums :
    Inscription : Janvier 2008
    Messages : 330
    Points : 254
    Points
    254
    Par défaut
    Bonjour,
    Il existe des fonctions de récurrence ( apply, lapply, tapply, ...) qui sont très efficaces et pouvant résoudre ton problème. Exemple:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    #Import de ton fichier de données (attention à l'option header=TRUE si ton fichier ne contient pas des noms de colonnes)
    donnee <- read.table("dataTest1.txt", header=TRUE, sep="", dec=".")
    summary(donnee) #optionnel
    donnee$Date <- as.factor(donnee$Date)
    ff <- tapply(donnee$Hauteur, donnee$Date, mean)
    data.frame(ff) #optionnel
    BC

  4. #4
    ced
    ced est déconnecté
    Rédacteur/Modérateur

    Avatar de ced
    Homme Profil pro
    Gestion de bases de données techniques
    Inscrit en
    Avril 2002
    Messages
    6 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Gestion de bases de données techniques
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Avril 2002
    Messages : 6 016
    Points : 23 705
    Points
    23 705
    Par défaut
    Bonjour,

    Citation Envoyé par vincent1989 Voir le message
    Lors de mon dernier post, ced m'a donné un outil très puissant "data.table" permettant de trier des data.frame. Je peux supposer que cet outil est capable de lire les dates de la 1ère colonne et alors trier les données en prenant en compte cette info. Mais je n'ai pas réussi à trouver doc pertinente sur data.table. :s
    Effectivement, une fois qu'on a compris comment marche data.table, ce type de calcul devient à la fois très simple, et d'une efficacité redoutable en termes de temps de traitement (bien plus que les apply, aggregate, plyr et autres).

    Dans votre cas, voici ce que ça donne :
    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
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    > library(data.table)
    data.table 1.8.7  For help type: help("data.table")
     
    > heau <- data.table(jour = c("20000801", "20000801", "20000801", "20000802", "20000802", "20000803", "20000803", "20000803", "20000803", "20000804", "20000804", "20000804", "20000805", "20000805")
    +   , heure = c("00:30", "07:42", "18:15", "01:12", "16:40", "00:51", "06:17", "13:32", "21:14", "02:15", "12:20", "22:10", "03:00", "23:00")
    +   , hauteur = c(20.4, 25.2, 23.5, 27.1, 29.2, 30.5, 33.4, 31.3, 31.2, 33.2, 34.5, 36.2, 34.0, 32.5)
    + )
     
    > heau
            jour heure hauteur
     1: 20000801 00:30    20.4
     2: 20000801 07:42    25.2
     3: 20000801 18:15    23.5
     4: 20000802 01:12    27.1
     5: 20000802 16:40    29.2
     6: 20000803 00:51    30.5
     7: 20000803 06:17    33.4
     8: 20000803 13:32    31.3
     9: 20000803 21:14    31.2
    10: 20000804 02:15    33.2
    11: 20000804 12:20    34.5
    12: 20000804 22:10    36.2
    13: 20000805 03:00    34.0
    14: 20000805 23:00    32.5
     
    > setkey(heau, jour)
     
    > heau[, mean(hauteur), by = jour]
           jour       V1
    1: 20000801 23.03333
    2: 20000802 28.15000
    3: 20000803 31.60000
    4: 20000804 34.63333
    5: 20000805 33.25000
    Voilà, c'est tout simple...
    Rédacteur / Modérateur SGBD et R
    Mes tutoriels et la FAQ MySQL

    ----------------------------------------------------
    Pensez aux balises code et au tag
    Une réponse vous a plu ? N'hésitez pas à y mettre un
    Je ne réponds pas aux questions techniques par message privé, les forums sont là pour ça

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2012
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2012
    Messages : 11
    Points : 9
    Points
    9
    Par défaut
    Merci ced pour le tuyau !
    Je devrais par la suite être confronté à des séries de données temporelles beaucoup plus longues que celle que j'ai indiquée en exemple, mais votre réponse me guide désormais sur la bonne voie !
    Amicalement,
    vincent

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

Discussions similaires

  1. Un problème particulier (data.frame)
    Par Eliam dans le forum R
    Réponses: 8
    Dernier message: 19/05/2015, 11h49
  2. mean() sur ligne data.frame : problème des levels
    Par AustinPower999 dans le forum R
    Réponses: 0
    Dernier message: 01/04/2013, 22h11
  3. Ajouter des données à un data frame
    Par orland dans le forum R
    Réponses: 3
    Dernier message: 05/12/2012, 12h47
  4. Réponses: 3
    Dernier message: 20/09/2011, 10h24
  5. Probléme avec DATA liaison avec une base de données
    Par patbold dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 26/03/2011, 10h28

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