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 :

Création BD avec boucle for et conditionnement


Sujet :

R

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2015
    Messages : 12
    Points : 14
    Points
    14
    Par défaut Création BD avec boucle for et conditionnement
    Bonjour,

    J'ai un data frame qui est composé de 5000 observations et 15 variables qui se présente comme ceci :


    PAYS YEAR GROUP Var1 Var 2 .......
    FRA 1993 1 70 45
    FRA 1998 1 75 35
    FRA 2003 2 30 50
    FRA 2008 2 40 60
    BEL 1993 1 90 20
    BEL 1998 1 100 90
    BEL 1993 2 80 30
    BEL 1998 2 40 40

    La variables year correspond aux années de relevés qui sont de période 5.
    Je souhaite que pour i allant de 1 à 5000, si (PAYS[i]=PAYS[i+1] & YEAR[i]+5=YEAR[i+1] & GROUP[i]=GROUP[i+1]) Alors on crée le data_frame suivant :

    PAYS YEAR1 YEAR2 GROUP Var1.1 Var1.2 Var 2.1 Var2.2
    FRA 1993 1998 170 70 45 35
    FRA 2003 2008 2 30 40 50 60
    BEL 1993 1998 1 90 100 20 90
    BEL 1993 1998 2 80 40 30 40

    Pour l'instant, j'ai essayé ça :
    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
    i <- 1
    j <- 1
    for (i in 1:nrow(data_f)){
      if (data_f$contcod[i]==data_f$contcod[i+1] & 
          data_f$group[i]==data_f$group[i+1] & 
          data_f$bin_year[i]+5==data_f$bin_year[i+1]){
        DATA_FINAL$contcod[j] = data_f$contcod[i] 
        DATA_FINAL$group[j] = data_f$group[i] 
        DATA_FINAL$region[j] = data_f$region[i] 
        DATA_FINAL$annee1[j] = data_f$bin_year[i] 
        DATA_FINAL$annee2[j] = data_f$bin_year[i+1]
        j <- j+1 
        i <- i+1
      } else {
          i<- i+1
          DATA_FINAL$contcod[j] = data_f$contcod[i] 
          DATA_FINAL$group[j] = data_f$group[i] 
          DATA_FINAL$region[j] = data_f$region[i] 
          DATA_FINAL$annee1[j] = data_f$bin_year[i] 
          DATA_FINAL$annee2[j] = data_f$bin_year[i+1]
          j <- j+1
        }
    }
    Mais je reçois le warning suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    In `[<-.data.table`(x, j = name, value = value) :
      Supplied 8 items to be assigned to 1 items of column 'annee1' (7 unused)
    Est-ce que quelqu'un aurait une idée de la manière comment procéder?
    Merci à vous!

  2. #2
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2015
    Messages
    12
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2015
    Messages : 12
    Points : 14
    Points
    14
    Par défaut Réponse
    Bonjour, mon problème a été résolu, il y avait un problème dans ma boucle car je cherchais de 1 à length(data) hors length(data)+1=NA.
    J'ai créé une matrice avec pour nom de colonne les variables que nous crééons et finalement, ca marche :
    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
    DATA_FINAL1 <- matrix(DATA_FINAL,nrow=3743,ncol=15)
    colnames(DATA_FINAL1) <- names(DATA_FINAL)
     
    DATA_FINAL1 <- data.frame(DATA_FINAL1)
    View(DATA_FINAL1)
    i <- 1
    j <- 1
     
    for (i in 1:(nrow(data_f)-1)){
      if (data_f$contcod[i]==data_f$contcod[i+1] & 
          data_f$group[i]==data_f$group[i+1] & 
          data_f$bin_year[i]+5==data_f$bin_year[i+1]){
        DATA_FINAL1$contcod[j] = as.character(data_f$contcod[i])
        DATA_FINAL1$group[j] = data_f$group[i] 
        DATA_FINAL1$region[j] = as.character(data_f$region[i])
        DATA_FINAL1$annee1[j] = data_f$bin_year[i] 
        DATA_FINAL1$annee2[j] = data_f$bin_year[i+1]
        DATA_FINAL1$pop1[j] = data_f$Pop[i] 
        DATA_FINAL1$pop2[j] = data_f$Pop[i+1] 
        DATA_FINAL1$pop_d1[j] = data_f$Pop_d[i] 
        DATA_FINAL1$pop_d2[j] = data_f$Pop_d[i+1] 
        DATA_FINAL1$GHG1[j] = data_f$GHG[i] 
        DATA_FINAL1$GHG2[j] = data_f$GHG[i+1] 
        DATA_FINAL1$PIB_hab1[j] = data_f$PIB_hab[i] 
        DATA_FINAL1$PIB_hab2[j] = data_f$PIB_hab[i+1] 
        DATA_FINAL1$dep_tot_me1[j] = data_f$Dep_tot_me[i] 
        DATA_FINAL1$dep_tot_me2[j] = data_f$Dep_tot_me[i+1] 
        j <- j+1 
      } 
    }
    View(DATA_FINAL1)

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

Discussions similaires

  1. script avec boucle for
    Par gloglo dans le forum Langage SQL
    Réponses: 16
    Dernier message: 30/05/2007, 14h30
  2. Problème avec boucle for() et action POST
    Par Oli_Ifre dans le forum Langage
    Réponses: 4
    Dernier message: 26/04/2007, 09h52
  3. Création dynamique et boucle for en vba Access 2000
    Par billy123 dans le forum Access
    Réponses: 4
    Dernier message: 22/02/2007, 11h29
  4. [ActionScript] Problème avec boucle 'FOR'
    Par BnA dans le forum Flash
    Réponses: 7
    Dernier message: 02/11/2006, 09h26
  5. faire plusieur declaration avec boucle for ?
    Par debutant-1 dans le forum C
    Réponses: 4
    Dernier message: 18/05/2006, 20h19

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