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
Partager