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 :

Que représentent exactement les "levels" dans un factor ?


Sujet :

R

  1. #1
    Membre du Club
    Inscrit en
    Février 2008
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 61
    Points : 43
    Points
    43
    Par défaut Que représentent exactement les "levels" dans un factor ?
    Bonjour!

    Qu'est-ce que représentent exactement les "levels" dans un factor dans le langage R? Est-ce la liste des valeurs possibles dans ce factor, sans faire de répétition?

    Merci d'avance!

  2. #2
    Membre expert
    Avatar de pitipoisson
    Homme Profil pro
    Chercheur
    Inscrit en
    Septembre 2006
    Messages
    1 942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 942
    Points : 3 378
    Points
    3 378
    Par défaut
    Citation Envoyé par circe Voir le message
    Est-ce la liste des valeurs possibles dans ce factor, sans faire de répétition?
    Oui, c'est ça.
    En plus, j'ajouterais :
    • dans l'ordre des niveaux, car is sont sont ordonnés (et ont d'ailleurs une valeur numérique associée)
    • les niveaux possibles peuvent ne pas tous être présents dans un vecteur

    Un petit exemple pour illustrer:
    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
    > x <- factor(c("a", "b", "c"))
     
    > y <- factor(c("a", "b", "c"), levels=c("d", "a", "c", "b"))
     
    > levels(x)
    [1] "a" "b" "c"
     
    > y
    [1] a b c
    Levels: d a c b
     
    > as.numeric(y)
    [1] 2 4 3
     
    > summary(y)      # Nombre d'occurrences de chaque niveau
    d a c b 
    0 1 1 1
    Attention aux facteurs "pseudo numeriques", ils mènent à des erreurs importantes quand ils ont utilisés pour l'indiçage (la valeur numérique ne correspond pas nécessairement au nombre affiché par levels(...)) :
    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
    > n <- factor(as.character(seq(from=10, to=1, by=-2)))
     
    > n
    [1] 10 8  6  4  2 
    Levels: 10 2 4 6 8
     
    > LETTERS[n]
    [1] "A" "E" "D" "C" "B"
     
    # Alors qu'on s'attendrait à avoir
    > LETTERS[seq(from=10, to=1, by=-2)]
    [1] "J" "H" "F" "D" "B"
     
    > as.numeric(n)   # explication:
    [1] 1 5 4 3 2
     
    # Tandis que :
    > levels(n)
    [1] "10" "2"  "4"  "6"  "8" 
     
    # (ce sont en fait des chaînes de charactères)
    Forum LaTeX : pour des réponses rapides et appropriées, pensez à poster un
    ECM = Exemple (reproduit le problème) Complet (document compilable) Minimal (ne postez pas votre thèse !)

    Une solution vous convient ? N'oubliez pas le tag


    )><))))°>

  3. #3
    Membre du Club
    Inscrit en
    Février 2008
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 61
    Points : 43
    Points
    43
    Par défaut
    Merci beaucoup! Ca m'aide bien!
    J'ai juste encore une question quant à l'utilisation de as.numeric() ou numeric(): quelle est la différence? Qu'est-ce qui est préférable d'utiliser? Et dans quelle situation?

    Merci d'avance!!

  4. #4
    Membre expert
    Avatar de pitipoisson
    Homme Profil pro
    Chercheur
    Inscrit en
    Septembre 2006
    Messages
    1 942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 942
    Points : 3 378
    Points
    3 378
    Par défaut
    numeric() c'est pour créer un vecteur numerique; as.numeric() c'est pour convertir vers du numerique
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    > numeric(10)     # raccourci de numeric(length=10)
     [1] 0 0 0 0 0 0 0 0 0 0
    > as.numeric(10)
    [1] 10
    > as.numeric(c("3", "8", "1.25"))
    [1] 3.00 8.00 1.25
    Edit: en reprenant l'exemple précédant, essaye
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    as.numeric(as.character(n))
    Forum LaTeX : pour des réponses rapides et appropriées, pensez à poster un
    ECM = Exemple (reproduit le problème) Complet (document compilable) Minimal (ne postez pas votre thèse !)

    Une solution vous convient ? N'oubliez pas le tag


    )><))))°>

  5. #5
    Membre du Club
    Inscrit en
    Février 2008
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 61
    Points : 43
    Points
    43
    Par défaut
    Merci pour la réponse claire :-)

    J'aurais encore une question concernant les "levels": j'ai un tableau dont l'une des colonnes contient des occurences qui se répètent, par exemple:

    Entete_tableau
    Truc1
    Truc2
    Truc1
    Truc3
    Truc3
    Truc2
    Truc3
    Truc1
    ...

    La fonction "levels" m'a permis de faire une liste contenant "Truc1", "Truc2", "Truc3" seulement.

    Y existe-t-il un moyen simple de compter le nombre d'occurences "Truc2" dans la colonne du tableau, sans faire de boucle?

    Merci d'avance!

  6. #6
    Membre expert
    Avatar de pitipoisson
    Homme Profil pro
    Chercheur
    Inscrit en
    Septembre 2006
    Messages
    1 942
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Chercheur
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Septembre 2006
    Messages : 1 942
    Points : 3 378
    Points
    3 378
    Par défaut
    Oui,
    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
    > x <- factor(c("Truc1", "Truc2", "Truc1", "Truc3", "Truc3", "Truc2", "Truc3", "Truc1"))
     
    > summary(x)
    Truc1 Truc2 Truc3 
        3     2     3 
     
    > summary(x)["Truc2"]
    [1] 2
     
    > tapply(x, x, length)
    Truc1 Truc2 Truc3 
        3     2     3 
     
    > tapply(x, x, length)["Truc2"]
    [1] 2
    remplace x par tableau[ , "nom_colonne"] (data.frame ou matrix) ou bien tableau$nom_colonne (data.frame uniquement).
    Forum LaTeX : pour des réponses rapides et appropriées, pensez à poster un
    ECM = Exemple (reproduit le problème) Complet (document compilable) Minimal (ne postez pas votre thèse !)

    Une solution vous convient ? N'oubliez pas le tag


    )><))))°>

  7. #7
    Membre du Club
    Inscrit en
    Février 2008
    Messages
    61
    Détails du profil
    Informations forums :
    Inscription : Février 2008
    Messages : 61
    Points : 43
    Points
    43
    Par défaut
    Merci beaucoup! Ca m'a été très utile!!

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

Discussions similaires

  1. Que représente exactement HDEVINFO ?
    Par superc7 dans le forum Windows
    Réponses: 1
    Dernier message: 06/06/2007, 16h59

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