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 :

"invalid factor level, NA generated"


Sujet :

R

  1. #1
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2012
    Messages
    83
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2012
    Messages : 83
    Points : 60
    Points
    60
    Par défaut "invalid factor level, NA generated"
    Voici mes variables :

    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
     
    > summary(don)
     Frais.Mensuels Quantité.Actes                Region       Surcomp     
     1:413634       1:473934       Ile de France     :211595   NON:987242  
     2:413175       2:366151       Bretagne          :164672   OUI:252888  
     3:413321       3:400045       Nord Pas de Calais:113707               
                                   Pays de Loire     :106965               
                                   Rhône Alpes       : 96173               
                                   Alsace            : 73314               
                                   (Other)           :473704               
                           Type             Age                Ancienneté    
     Famille * 2enfants      :312310   42 à 47:216243   21 à 24 mois:602213  
     Isolé                   :276494   37 à 42:210649   9 à 12 mois :223997  
     Famille * 1enfant       :203437   47 à 52:191793   3 à 6 mois  : 88493  
     Famille * 3 ou + enfants:178646   32 à 37:168549   6 à 9 mois  : 67601  
     Couple                  :168477   52 à 57:152201   - 1 mois    : 60700  
     Isolé * 1enfant         : 45079   27 à 32:136518   18 à 21 mois: 60460  
     (Other)                 : 55687   (Other):164177   (Other)     :136666  
             Code.activité              Regroup.Poste.soins
     Distribution   :255928   Consultations       :144488  
     Agroalimentaire:136628   Pharmacie           :140375  
     Services       :120693   Actes de radiologie :108509  
     Informatique   : 73800   Auxiliaires médicaux: 98754  
     Transport      : 71024   Analyses médicales  : 92544  
     (Other)        :532592   (Other)             :655440  
     NA's           : 49465   NA's                :    20
    Et ci-joint, le code qui pose problème :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    don$Region[don$Region %in% c("Aquitaine","Midi Pyrénées","Languedoc Roussillon","Provence Alpes Cote d'Azur","Rhône Alpes","Centre","Auvergne","Limousin")]<- "CENTRE_SUD"
    
    
    Warning message:
    In `[<-.factor`(`*tmp*`, don$Region %in% c("Aquitaine", "Midi Pyrénées",  :
    invalid factor level, NA generated
    
    J'effectue ce regroupement de modalités dans le but de réaliser une ACM, mais je n'arrive pas à regrouper ces fichues modalités entre-elles sous une nouvelle.

    Le problème vient d'erreurs codées "NA" ? La présence d'autres modalités ?

    Bref, le summary de ma variable Region en guise d'exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    > levels(Region)
     [1] "Alsace"                     "Aquitaine"                 
     [3] "Auvergne"                   "Auvergne  "                
     [5] "Bourgogne"                  "Bretagne"                  
     [7] "Centre"                     "Champagne Ardennes"        
     [9] "DOM TOM ou autres"          "Franche Comté"             
    [11] "Ile de France"              "Languedoc Roussillon"      
    [13] "Limousin"                   "Lorraine"                  
    [15] "Midi Pyrénées"              "Nord Pas de Calais"        
    [17] "Normandie ( Basse )"        "Normandie ( Haute )"       
    [19] "Pays de Loire"              "Picardie"                  
    [21] "Poitou Charentes"           "Provence Alpes Cote d'Azur"
    [23] "Rhône Alpes"
    Merci d'avance !

  2. #2
    Nouveau membre du Club
    Inscrit en
    Mai 2013
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Mai 2013
    Messages : 18
    Points : 38
    Points
    38
    Par défaut
    Bonjour,

    Sous R, un facteur à un ensemble de valeurs définies, dans ton cas ce sont les valeurs que tu retrouves dans le sommaire des données. "CENTRE-SUD" ne fait pas partie de l'ensemble de définition de ton facteur. Donc, grosso modo, R ne sais pas à quoi "CENTRE-SUD" correspond par rapport aux autres facteur de ta variable Région, il ne fait pas partie des valeurs possibles de la variable, R renvoie NA.

    Deux possibilités pour relever ce problème :
    1) tu crées une nouvelle variable, ce qui fait sens puisque effectivement "CENTRE-SUD" n'est pas de la même nature que tes régions, c'est un regroupement plus large :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    # ifelse ( le test, si c'est vrai, si c'est faux)
    don$Region2 <- ifelse(
       test=as.character(don$Region) %in% c("Aquitaine", "Midi Pyrénées",
           "Languedoc   Roussillon", "Provence Alpes Cote d'Azur",
           "Rhône Alpes","Centre","Auvergne","Limousin"),
      yes= "CENTRE_SUD",
      no = as.character(don$Region)
      )
    don$Region2 <- as.factor(don$Region2)
    2) soit tu persistes à vouloir remplacer ta variable et dans le code ci-avant tu remplaces don$Region2 par don$Region

    Dans cette solution as.character permet de comparer des chaînes de caractères et non plus des facteurs, tu ne devrais donc plus avoir le problème que tu rencontres.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Mai 2013
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Mai 2013
    Messages : 18
    Points : 38
    Points
    38
    Par défaut
    La nouvelle colonne est normalement identique sauf pour les régions choisie regroupées sous un nouveau nom "CENTRE-SUD" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    c("Aquitaine", "Midi Pyrénées",
           "Languedoc   Roussillon", "Provence Alpes Cote d'Azur",
           "Rhône Alpes","Centre","Auvergne","Limousin")
    Un exemple avec un code tout simple :
    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
     
    mesDonnees <- data.frame(
    	region =  c('Alsace', 'Auvergne', 'Bourgogne',  'Champagne Ardennes')
    )
     
    > mesDonnees
                   region
    1             Alsace
    2           Auvergne
    3          Bourgogne
    4 Champagne Ardennes
     
    # je veux regrouper 'Alsace' et 'Champagne Ardennes'
     
    mesDonnees$region2 <- ifelse(
    	test=as.character(mesDonnees$region) %in% c('Alsace', 'Champagne Ardennes'),
    	yes="MonGroupe",
            no=as.character(mesDonnees$region)
    )
     
    > mesDonnees
                  region   region2
    1             Alsace MonGroupe
    2           Auvergne  Auvergne
    3          Bourgogne Bourgogne
    4 Champagne Ardennes MonGroupe

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 20/09/2009, 19h31

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