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 :

Décomposition d'une date


Sujet :

R

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    93
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 93
    Par défaut Décomposition d'une date
    Bonjour,

    Je dispose d'une matrice de données que je lis à partir d'un fichier csv :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    data=read.csv2("myfile.csv",header=TRUE)
    Les premières lignes de ma matrice data de taille 1461 3 sont comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    1    01/01/2004     9        SS
    2    02/01/2004    24        NE
    3    03/01/2004    25        SS
    4    04/01/2004    21        SO
    5    05/01/2004    16        SS
    A partir de cette matrice, j'aimerai créer une autre matrice qui ait les attributs suivants :
    Jour Mois Année Nombre (je garde la colonne 2 sans rien modifier) Lettres (idem)

    J'ai demandé le typeof(data[1,1]) et R me répond "integer"
    Quand je lui demande is.integer(data[1,1]) il me répond FALSE ...

    Merci pour votre aide !

  2. #2
    Membre Expert
    Avatar de pitipoisson
    Homme Profil pro
    Chercheur
    Inscrit en
    Septembre 2006
    Messages
    1 942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 942
    Par défaut
    Bonjour,

    Que renvoient
    et
    ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    93
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 93
    Par défaut
    Ça me renvoie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    > mode(data[ , 1])
    [1] "numeric"
    > class(data[ , 1])
    [1] "factor"
    Par contre, si je lis mes données comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    data=as.matrix(read.csv2("myfile.csv",header=TRUE))
    J'obtiens :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    > typeof(data[1,1])
    [1] "character"
    > is.character(data[1,1])
    [1] TRUE
    > mode(data[ , 1])
    [1] "character"
    > class(data[ , 1])
    [1] "character"
    Par contre cela va me poser un problème pour la 2ème colonne où là dans le fichier myfile.csv j'ai des entiers ? A moins qu'il existe une fonction pour les convertir facilement ?

    Merci beaucoup d'avance,

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    93
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 93
    Par défaut
    En fait j'ai trouvé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    date=matrix(nrow=dim(data)[1],ncol=3)
    for (i in 1:dim(data)[1])
    {
    date[i,1]=as.integer(strftime(as.Date(data[i,1],format="%d/%m/%Y"),"%d"))
    date[i,2]=as.integer(strftime(as.Date(data[i,1],format="%d/%m/%Y"),"%m"))
    date[i,3]=as.integer(strftime(as.Date(data[i,1],format="%d/%m/%Y"),"%Y"))
    }
    Merci quand même !

  5. #5
    Membre Expert
    Avatar de pitipoisson
    Homme Profil pro
    Chercheur
    Inscrit en
    Septembre 2006
    Messages
    1 942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 942
    Par défaut
    Bonjour,

    Juste pour info, si on ne veut pas passer par les formats de dates, on peut faire de la recherche de motif (expressions régulières) dans les chaînes de caractères :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    > as.integer(sub("([[:digit:]]{2})/[[:digit:]]{2}/[[:digit:]]{4}", "\\1", "30/11/2009", perl=TRUE))
    [1] 30
    > as.integer(sub("[[:digit:]]{2}/([[:digit:]]{2})/[[:digit:]]{4}", "\\1", "30/11/2009", perl=TRUE))
    [1] 11
    > as.integer(sub("[[:digit:]]{2}/[[:digit:]]{2}/([[:digit:]]{4})", "\\1", "30/11/2009", perl=TRUE))
    [1] 2009
    Ceci dit, ta solution à l'avantage de vérifier si la date en question existe bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    > as.integer(strftime(as.Date("31/11/2009",format="%d/%m/%Y"),"%d"))
    [1] NA

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

Discussions similaires

  1. [Crystal] transformation d'une date en numéro de semaine
    Par barna dans le forum SAP Crystal Reports
    Réponses: 4
    Dernier message: 24/03/2017, 09h41
  2. Récupérer l'année d'une date
    Par delphim dans le forum Langage SQL
    Réponses: 3
    Dernier message: 15/01/2003, 16h33
  3. tester si une date est valide
    Par Andry dans le forum Langage
    Réponses: 5
    Dernier message: 17/09/2002, 11h54
  4. Generation d'evenements a une date precise
    Par pascalzzz dans le forum MFC
    Réponses: 2
    Dernier message: 04/06/2002, 15h21
  5. Réponses: 3
    Dernier message: 19/04/2002, 00h11

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