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 :

Remplir les cellules vides d'une colonne en fonction des cellules d'une autre colonne


Sujet :

R

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Avril 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2016
    Messages : 17
    Par défaut Remplir les cellules vides d'une colonne en fonction des cellules d'une autre colonne
    Bonjour,
    je débute en programmation R et j'ai un problème, je souhaite remplir les cellules vides d'une colonne en fonction des cellules d'une autre colonne de la même matrice
    j'ai ce tableau ci dessous
    Titre Arrivees Noms Periode
    dame 12/01/15 Akissi
    Mlle 11/06/16 Adjoua
    mr 10/08/14 Yao

    et je voudrais avoir la colonne Période rempli en fonction de Arrivées ( date ) pour toutes les années 15 avoir dans la colonne Période "14/15" en résume ça donne ça mais avec 900 lignes

    Titre Arrivees Noms Periode
    dame 12/01/15 Akissi 14/15
    Mlle 11/06/16 Adjoua 15/16
    mr 10/08/14 Yao 13/14



    Merci de m'aider a trouver le code pour le faire

  2. #2
    Membre éprouvé
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Décembre 2015
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2015
    Messages : 72
    Par défaut
    Bonjour,

    Si bien compris, le but est de trouver l'année scolaire associée à la date (année de aout 2015 à juillet 2016 pour la période 15-16)

    Si c'est le cas, je propose de passer par les chaînes de caractère, même s'il doit exister quelque-chose avec le format Date :


    Code R : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    data$Periode<-rep(c(""),times=dim(data)[1])
    for (i in 1:dim(data)[1]){
        #On détermine le mois pour identifier si on est en n-1/n ou n/n+1
        Mois<-as.numeric(substr(data$Arrivees[i],4,5)) 
        Annee<-as.numeric(substr(data$Arrivees[i],7,8)) #On récupère l'année n
        if(Mois<=7){ # Si on est de janvier à juillet, on sera sur la période n-1/1
            data$Periode[i]<-paste(Annee-1,"/",Annee,sep="")
        }else{ #Si on est d'aout à décembre, on sera sur la période n/n+1
            data$Periode[i]<-paste(Anne,"/",Annee+1,sep="")
        }
    }

    J'espère que cela vous aidera

  3. #3
    Membre averti
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Avril 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2016
    Messages : 17
    Par défaut message d'erreur
    Merci mais il y a un hic

    voici le message d'erreur que j'obtiens

    Erreur dans if (Mois <= 7) { :
    valeur manquante là où TRUE / FALSE est requis

  4. #4
    Membre éprouvé
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Décembre 2015
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2015
    Messages : 72
    Par défaut
    Cela doit venir du jeu de données, qui n'est pas tout à fait le même que le mien.

    Pour ma part, j'ai travaillé sur un data frame s'appellant data, avec la colonne Arrivees en chaine de charactère.

    Il est difficile d'aider à distance. Il faudrait vérifier que Mois est bien une variable numérique à une seule valeur je pense.

  5. #5
    Membre averti
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Avril 2016
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2016
    Messages : 17
    Par défaut
    ok j'essais encore

  6. #6
    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 : 37
    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
    Par défaut
    Bonjour,

    Une possibilité en mettant les arrivées au format "date" et en utilisant le package "lubridate" (il y a sûrement moyen d'optimiser cela...) :

    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
    35
    36
    # creation d'un jeu de donnes test
    D <- data.frame(Titre = c("dame", "Mlle", "mr"), Arrivees = c("12/01/15", "11/06/16", "20/09/14"), Noms = c("Akissi", "Adjoua", "Yao"))
     
    D$Arrivees <- as.Date(D$Arrivees, format = "%d/%m/%y")
     
    # chargement du package "lubridate" (a installer avant s'il ne l'est pas deja)
    library(lubridate)
     
     
    N <- dim(D)[1]
    Periode <- rep("", N)
     
    for(i in 1:N)
    {
        the_date = D$Arrivees[i]   # recupere la date d'arrivees pour l'individu i
        the_month = month(the_date)  # va contenir le numero du mois de cette date
        the_year = as.numeric(substr(year(the_date), 3, 4))  # va contenir les deux derniers chiffres de l'annee de cette date, passés au format numerique
     
        if(the_month > 8)
        {
    	z <- paste0(the_year, "/", the_year+1)
        }
        else
        {
    	z <- paste0(the_year-1, "/", the_year)
        }
     
        Periode[i] <- z
    }
     
    # verifications
    D <- data.frame(D, Periode)
    D
    1  dame 2015-01-12 Akissi   14/15
    2  Mlle 2016-06-11 Adjoua   15/16
    3    mr 2014-09-20    Yao   14/15
    HTH


    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.

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 31/05/2015, 20h57
  2. [XL-2010] Remplir listbox à partir d'une combobox en gérant des cellules vides
    Par vbanouveau dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 29/09/2014, 11h25
  3. Réponses: 2
    Dernier message: 10/10/2013, 15h35
  4. Réponses: 2
    Dernier message: 17/03/2011, 21h45
  5. Réponses: 2
    Dernier message: 13/12/2007, 15h02

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