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 :

transformation en objet "chron"


Sujet :

R

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Octobre 2011
    Messages : 84
    Par défaut transformation en objet "chron"
    Bonjour,

    Je dispose d'une série temporelle de données sous la forme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Factor w/ 5791 levels "01.01.2010 00:00",..:

    Afin de pouvoir plus facilement manipuler mes données en fonction de la date et de l'heure (j'ai deux ans de données relevées toutes les 3h), je pensais transformer ma colonne de dates-heures en objet "chron".
    J'utilise donc le package associé, mais je peine à transformer ma colonne.
    Au départ, je transformais cette colonne en PÖSIXct. Puis la console m'indique que "chron" ne transforme que les objets "character" ou numeric (bien qu'un certain didacticiel trouvé en ligne m'indique qu'il est possible de transformer des POSIXct en chron). Bref, je transforme donc cette colonne en character, et essaye de convertir en chron (NO[[1]] est ma colonne de dates-heures):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    > NO[[1]] <- chron(NO[[1]], "d/m/Y h:m:s")
    Erreur dans convert.dates(dates., format = format[[1]], origin. = origin.) : 
      format m/d/y may be incorrect
    De plus : Messages d'avis :
    1: In unpaste(dates., sep = fmt$sep, fnames = fmt$periods, nfields = 3) :
      5791 entries set to NA due to wrong number of fields
    2: In convert.dates(dates., format = format[[1]], origin. = origin.) :
      NAs introduits lors de la conversion automatique
    3: In convert.dates(dates., format = format[[1]], origin. = origin.) :
      NAs introduits lors de la conversion automatique
    4: In convert.dates(dates., format = format[[1]], origin. = origin.) :
      NAs introduits lors de la conversion automatique
    Il y a donc quelque chose qui ne fonctionne pas.
    Auriez-vous quelques informations utiles pour m'aider à transformer:

    "01.01.2010 00:00" en format chron facilement manipulable?

    En vous remerciant,
    bien cordialement.

  2. #2
    Membre chevronné Avatar de Beniou
    Homme Profil pro
    Inscrit en
    Novembre 2009
    Messages
    357
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Novembre 2009
    Messages : 357
    Par défaut
    Bonjour,

    N'ayant jamais essayé ce paquet, je l'ai testé succinctement et voici mes remarques :
    1) Je pense que l'on est obligé de séparer les dates des heures et donc qu'un chaîne contenant les deux informations ne pourra pas être transformé. Mais je peux me tromper.

    2) Les objets times de chron nécessite obligatoirement apparemment des secondes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    > times("12:00", format="h:m")
    Erreur dans convert.times(times., fmt) : format h:m may be incorrect
    De plus : Message d'avis :
    In is.na(out$s) :
      is.na() appliqué à un objet de type 'NULL' qui n'est ni une liste, ni un vecteur
    > times("12:00:00", format="h:m:s")
    [1] 12:00:00
    Donc si tu arrives à ajouter des secondes à tes données (ce qui ne devraient pas être très dur) voici un moyen, certes un peu confus mais qui marche chez moi.

    En fait : je découpe les données pour avoir une date suivie d'une heure dans un objet, puis je transforme à l'aide de chron : les indices impairs sont les dates et les pairs les heures.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    > data <- c("01.01.2010 00:00:00","01.01.2010 12:00:00","02.01.2010 00:00:00")
    > data.unlist <- unlist(strsplit(data," "))
    > data.unlist
    [1] "01.01.2010" "00:00:00"   "01.01.2010" "12:00:00"   "02.01.2010"
    [6] "00:00:00"  
    > transform <- chron(data.unlist[seq(1,length(data.unlist),2)], data.unlist[seq(2,length(data.unlist),2)], format=c(dates="d.m.y", times="h:m:s"))
    > transform
    [1] (01.01.10 00:00:00) (01.01.10 12:00:00) (02.01.10 00:00:00)
    Il y a peut être plus simple mais c'est une piste...

  3. #3
    Membre confirmé
    Femme Profil pro
    Étudiant
    Inscrit en
    Octobre 2011
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Octobre 2011
    Messages : 84
    Par défaut
    Ok merci, je vais essayer de faire comme ça.

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