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!
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!
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:
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 > 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
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)
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!!
numeric() c'est pour créer un vecteur numerique; as.numeric() c'est pour convertir vers du numerique
Edit: en reprenant l'exemple précédant, essaye
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
Code : Sélectionner tout - Visualiser dans une fenêtre à part as.numeric(as.character(n))
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!
Oui,
remplace x par tableau[ , "nom_colonne"] (data.frame ou matrix) ou bien tableau$nom_colonne (data.frame uniquement).
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
Merci beaucoup! Ca m'a été très utile!!
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager