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 :

Filtre de dates


Sujet :

R

  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2017
    Messages : 48
    Points : 31
    Points
    31
    Par défaut Filtre de dates
    Bonjour,

    Je viens à nouveaux solliciter votre aide précieuse. J'ai un fichier csv contenant plusieurs colonnes, l'une à pour titre date_analyse et contient des dates. j'ai envie de filtrer mes données par date d'analyse (au format: année-mois-jour heure:minute:seconde). Pour ce faire j'ai créer une fonction qui initialise mes données de base en les filtrant par les mois et l'année que je veux. Le problème c'est que, quand j'applique cette fonction, mon résultat est filtré partiellement. Je n'ai pas toutes les données consernant la période que j'ai choisis. Normalement après filtre je dois avoir 22166 lignes. Alors que moi je n'ai que 11082.
    Voici mon code:

    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
     
    donnees = read.csv2("20170824_qt1_matriciel.csv", sep =";", header=TRUE)
     
    init = function(donnees,Mois,Annee){
      data = donnees
      data$date = as.POSIXlt(strptime(data$date_analyse, "%Y-%m-%d %H:%M:%S"))
      data$mois = format(data$date, "%B")
      data$annee = format(data$date, "%Y")
      data = data[data$annee == Annee,]
      data = data[data$mois %in% Mois,]
      return(data)
    }
     
    S1 = c("janvier","février", "mars", "avril", "mai", "juin")
    Annee1 = "2017"
     
    d = init(donnees,S1,Annee1)
    Merci d'avance pour votre aide.

  2. #2
    Membre expérimenté
    Inscrit en
    Novembre 2009
    Messages
    703
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 703
    Points : 1 311
    Points
    1 311
    Par défaut Filtre de dates
    Bonjour,

    Votre programme semble fonctionner correctement.

    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
    donnees = read.csv2("d:/temp/test.txt")
     
    init = function(donnees,Mois,Annee){
      data = donnees
      data$date = as.POSIXlt(strptime(data$date_analyse, "%d/%m/%Y %H:%M:%S"))
      data$mois = format(data$date, "%B")
      data$annee = format(data$date, "%Y")
      data = data[data$annee == Annee,]
      data = data[data$mois %in% Mois,]
      return(data)
    }
     
    S1 = c("janvier","février", "mars", "avril", "mai", "juin")
    Annee1 = "2016"
     
    d = init(donnees,S1,Annee1)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    > d
             date_analyse                date    mois annee
    1 01/01/2016 12:00:00 2016-01-01 12:00:00 janvier  2016
    2 01/02/2016 12:00:00 2016-02-01 12:00:00 février  2016
    3 01/03/2016 12:00:00 2016-03-01 12:00:00    mars  2016
    4 01/04/2016 12:00:00 2016-04-01 12:00:00   avril  2016
    5 01/05/2016 12:00:00 2016-05-01 12:00:00     mai  2016
    6 01/06/2016 12:00:00 2016-06-01 12:00:00    juin  2016
    Il faudrait vérifier le contenu du fichier csv (est-ce que toutes les dates sont bien remplies et au même format ?) et l'import du fichier dans R.

    Avant de sélectionner sur la date, vous pouvez générer les variables année et mois et faire un tableau de fréquences.

    Cordialement,

    PS : Il vaut mieux utiliser les balises [CODE] que [QUOTE] autour de votre code. C'est plus facile à lire.
    Fichiers attachés Fichiers attachés

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2017
    Messages : 48
    Points : 31
    Points
    31
    Par défaut
    [QUOTE=mgdondon;9571970]Bonjour,

    Votre programme semble fonctionner correctement.

    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
    donnees = read.csv2("d:/temp/test.csv")
     
    init = function(donnees,Mois,Annee){
      data = donnees
      data$date = as.POSIXlt(strptime(data$date_analyse, "%d/%m/%Y %H:%M:%S"))
      data$mois = format(data$date, "%B")
      data$annee = format(data$date, "%Y")
      data = data[data$annee == Annee,]
      data = data[data$mois %in% Mois,]
      return(data)
    }
     
    S1 = c("janvier","février", "mars", "avril", "mai", "juin")
    Annee1 = "2016"
     
    d = init(donnees,S1,Annee1)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    > d
             date_analyse                date    mois annee
    1 01/01/2016 12:00:00 2016-01-01 12:00:00 janvier  2016
    2 01/02/2016 12:00:00 2016-02-01 12:00:00 février  2016
    3 01/03/2016 12:00:00 2016-03-01 12:00:00    mars  2016
    4 01/04/2016 12:00:00 2016-04-01 12:00:00   avril  2016
    5 01/05/2016 12:00:00 2016-05-01 12:00:00     mai  2016
    6 01/06/2016 12:00:00 2016-06-01 12:00:00    juin  2016
    Il faudrait vérifier le contenu du fichier csv (est-ce que toutes les dates sont bien remplies et au même format ?) et l'import du fichier dans R.

    Avant de sélectionner sur la date, vous pouvez générer les variables année et mois et faire un tableau de fréquences. (Les mois sont-ils écrits en français ou en anglais ?)

    Cordialement,

    PS : Il vaut mieux utiliser les balises [CODE] que [QUOTE] autour de votre code. C'est plus facile à lire.


    Bonjour,

    Je n'ai pas de soucis avec l'import du fichier dans R. Je retrouve bien les données que j'avais auparavant. Dans mon fichier csv j'ai quelques lignes de date qui sont vides et quelques lignes qui sont au format année-mois-jour au lieu de année-mois-jour heure:minute:seconde. Les mois et années dans mon fichier csv sont au format numériques. Je n'ai pas bien compris ce que vous vouliez dire par :
    Avant de sélectionner sur la date, vous pouvez générer les variables année et mois et faire un tableau de fréquences.
    ?

    Cordialement,

  4. #4
    Membre expérimenté
    Inscrit en
    Novembre 2009
    Messages
    703
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 703
    Points : 1 311
    Points
    1 311
    Par défaut
    Pour mettre un programme au point, il faut aller pas à pas.

    Vérifiez chaque étape avant de faire une fonction.

    La première étape est de générer les variables année et mois et vérifier ce qui a été généré.

    Maintenant si toutes vos dates ne sont pas au même format dans votre fichier csv, c'est normal que ça ne marche pas.

    Cordialement,

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2017
    Messages : 48
    Points : 31
    Points
    31
    Par défaut
    Pour les variables Annee et Mois après vérifiaction j'obtiens bien l'annee "2017" mais pas le mois de "janvier" et "février". Je ne sais pas pourquoi.

    Concernant le format des dates dans mon fichier csv, j'ai supprimé la partie concernant l'heure pour avoir le même format partout. Mais malheureusement j'ai toujours le même problème.

    Merci d'avance,

  6. #6
    Membre expérimenté
    Inscrit en
    Novembre 2009
    Messages
    703
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 703
    Points : 1 311
    Points
    1 311
    Par défaut Filtre de dates
    Avez-vous vérifié qu'il n'y a pas d'autres formats de dates (slash à la place de tirets, ordre jour/mois/année différent) ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    > data <- data.frame(date_analyse=c("2016-01-01 12:00:00","2016-01-01","2016/02/01 12:00:00"))
    > data$date = as.POSIXlt(strptime(data$date_analyse, "%Y-%m-%d %H:%M:%S"))
    > data
             date_analyse                date
    1 2016-01-01 12:00:00 2016-01-01 12:00:00
    2          2016-01-01                <NA>
    3 2016/02/01 12:00:00                <NA>
    Pouvez-vous fournir un court extrait de votre fichier ?

    Cordialement,

  7. #7
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2017
    Messages : 48
    Points : 31
    Points
    31
    Par défaut
    Bonjour,

    Vraiment désolé pour le retard. Pour votre question:

    Pouvez-vous fournir un court extrait de votre fichier ?
    , malheureusement je ne peux vous le fournir vu qu'il s'agit d'un fichier comportement des informations confidentielles. Je crois bien aussi que cela soucis devrait provenir du format de la colonne date_analyse (Vu que toutes les dates de sont pas au bon format). Car dans mes données, j'ai une autre colonne appelée date_reponse sur laquelle j'ai appliquée ma fonction et ça à marcher.

    Ceci m'amène à cette question: Comment faire pour mettre au propre une colonne de données? Vu qu'ici ma colonne ne respecte pas un format précis.

    Cordialement.

  8. #8
    Membre expérimenté
    Inscrit en
    Novembre 2009
    Messages
    703
    Détails du profil
    Informations forums :
    Inscription : Novembre 2009
    Messages : 703
    Points : 1 311
    Points
    1 311
    Par défaut Filtre de dates
    Bonjour,

    malheureusement je ne peux vous le fournir vu qu'il s'agit d'un fichier comportement des informations confidentielles
    Vous pouvez sélectionner une cinquantaine de dates indépendamment de toute autre variable.


    Comment faire pour mettre au propre une colonne de données ? Vu qu'ici ma colonne ne respecte pas un format précis.
    Soit vous nettoyez votre fichier en amont soit vous prévoyez différents formats de lecture :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    > data <- data.frame(date_analyse=c("2016-01-01 12:00:00","2016-01-01","2016/02/01 12:00:00"))
    > data$date <- as.POSIXlt(strptime(data$date_analyse, "%Y-%m-%d %H:%M:%S"))
    > data$date[is.na(data$date)] <- as.POSIXlt(strptime(data$date_analyse[is.na(data$date)], "%Y/%m/%d %H:%M:%S"))
    > # etc.
    > data
             date_analyse                date
    1 2016-01-01 12:00:00 2016-01-01 12:00:00
    2          2016-01-01                <NA>
    3 2016/02/01 12:00:00 2016-02-01 12:00:00
    Cordialement,

  9. #9
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    48
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2017
    Messages : 48
    Points : 31
    Points
    31
    Par défaut
    Bonjour,

    Merci beaucoup pour votre patience. En prévoyant plusieurs formats effectivement, le code marche à présent. C'est génial. Merci encore.

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

Discussions similaires

  1. probleme avec l filtre des date
    Par kroma23 dans le forum Bases de données
    Réponses: 8
    Dernier message: 15/05/2007, 16h32
  2. Formulaire filtré par date
    Par Guizbizet dans le forum IHM
    Réponses: 7
    Dernier message: 21/12/2006, 17h48
  3. Problème de filtre sur date avec ADOQuery
    Par lingli dans le forum Bases de données
    Réponses: 12
    Dernier message: 30/04/2006, 15h40
  4. Filtre sur date
    Par MagicManu dans le forum Requêtes
    Réponses: 2
    Dernier message: 20/08/2005, 00h05
  5. Filtre et date
    Par Shogun dans le forum Bases de données
    Réponses: 3
    Dernier message: 23/11/2004, 08h46

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