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

  1. #1
    Membre à l'essai
    Utiliser un critère dans un data.frame pour séparer un autre data.frame
    Bonjour,

    je dispose de deux data.frame (f2 et lex_var2) et je voudrai utiliser un critère du data.frame1 (lex_var2) pour séparer le data.frame2 (f2) en 3 data.frame (Dat_Quanti, Dat_Quali, Dat_Vide)
    f2 a en nom de colonne des variables communes avec lex_var2[,1] et en lex_var2[,2] il y a le critère de séparation

    Pour l'instant mon script ressemble à ca :

    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
    Dat_Quali = data.frame(f2$AN, f2$CODE)
    Dat_Quanti = data.frame(f2$AN, f2$CODE)
    Dat_Vide = data.frame(f2$AN, f2$CODE)
     
    # > head(Dat_Quanti)
    # f2.AN f2.CODE
    # 1  1988    P1G0
    # 2  1989    P1G0
    # 3  1990    P1G0
    # 4  1991    P1G0
    # 5  1992    P1G0
    # 6  1993    P1G0
     
    # > head(lex_var2)
    # # A tibble: 6 x 2
    # var    Type_données
    # <fct>  <chr>       
    #   1 AN     NA          
    # 2 date   NA          
    # 3 Final  NA          
    # 4 GEN    NA          
    # 5 NBG    Quantitatif 
    # 6 NBG_D1 Quantitatif 
     
     
    for (i in 1:ncol(f2)) {
     while (names(f2[i]) != lex_var2[k,1]) {  k = k+1  }
       if (is.na(lex_var2[k,2]) && names(f2[i])==lex_var2[k,1]) { 
         Dat_Vide = cbind(Dat_Vide, f2[,i]) }
       if (lex_var2[k,2] == "Quantitatif" && names(f2[i])==lex_var2[k,1]) { 
         Dat_Quanti = cbind(Dat_Quanti, f2[,i]) }
       if (lex_var2[k,2] == "Qualitatif" && names(f2[i])==lex_var2[k,1] ) { 
         Dat_Quali = cbind(Dat_Quali, f2[,i]) }
      }


    et je n'arrive pas à le faire fonctionner
    Voila le message d'erreur :
    [CODE]Error in if (lex_var2[k, 2] == "Quantitatif" && names(f2[i]) == lex_var2[k, : missing value where TRUE/FALSE needed[/CODE]

    Si vous voyez le problème ou si vous avez une autre méthode je suis preneuse Merci

  2. #2
    Membre à l'essai
    Personne a une petite idée ??

  3. #3
    Membre à l'essai
    Enfin trouvée!!
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    fusion = f2
     
    Quali = lex_var2 %>% filter(Type_données=="Qualitatif")
    Quanti = lex_var2 %>% filter(Type_données=="Quantitatif")
    Vide = lex_var2 %>% filter(is.na(Type_données))
     
    Dat_Quali = data.frame(fusion$AN, fusion$CODE, fusion[,intersect(Quali$var, colnames(fusion))])
    Dat_Quanti = data.frame(fusion$AN, fusion$CODE, fusion[,intersect(Quanti$var, colnames(fusion))])
    Dat_Vide = data.frame(fusion$CODE, fusion[,intersect(Vide$var, colnames(fusion))])