Cours
Si vous souhaitez suivre notre cours gratuit Intro to R, voici le lien.
Niveaux de facteur
Quand vous recevez un jeu de données, vous remarquerez souvent qu’il contient des facteurs avec des niveaux bien précis. Toutefois, il vous arrivera de vouloir renommer ces niveaux pour plus de clarté ou pour d’autres raisons. R vous le permet avec la fonction levels() :
levels(factor_vector) <- c("name1", "name2",...)
Un bon exemple est celui des données brutes issues d’une enquête. Une question fréquente dans tout questionnaire concerne le sexe de la personne répondante. Ici, pour simplifier, seules deux catégories ont été relevées, "M" et "F". (En pratique, il faut généralement plus de catégories pour les enquêtes ; dans tous les cas, on utilise un facteur pour stocker ces données catégorielles.)
survey_vector <- c("M", "F", "F", "M", "M")
Noter le sexe avec les abréviations "M" et "F" peut être pratique lors de la collecte sur papier, mais cela peut prêter à confusion à l’analyse. À ce stade, vous souhaiterez souvent remplacer les niveaux du facteur par "Male" et "Female" plutôt que "M" et "F" pour plus de clarté.
Attention : l’ordre dans lequel vous assignez les niveaux est important. Si vous tapez levels(factor_survey_vector), vous verrez que la sortie est [1] "F" "M". Si vous ne précisez pas les niveaux lors de la création du vecteur, R les attribue automatiquement par ordre alphabétique. Pour associer correctement "F" à "Female" et "M" à "Male", fixez les niveaux à c("Female", "Male"), dans cet ordre.
Consignes
- Examinez le code qui crée un vecteur facteur à partir de
survey_vector. Vous utiliserezfactor_survey_vectorà l’étape suivante. - Modifiez les niveaux de
factor_survey_vectorenc("Female", "Male"). Respectez l’ordre des éléments du vecteur.
# no pec
survey_vector <- c("M", "F", "F", "M", "M")
factor_survey_vector <- factor(survey_vector)
# Code pour construire factor_survey_vector
survey_vector <- c("M", "F", "F", "M", "M")
factor_survey_vector <- factor(survey_vector)
# Spécifiez les niveaux de factor_survey_vector
levels(factor_survey_vector) <-
factor_survey_vector
# Code pour construire factor_survey_vector
survey_vector <- c("M", "F", "F", "M", "M")
factor_survey_vector <- factor(survey_vector)
# Spécifiez les niveaux de factor_survey_vector
levels(factor_survey_vector) <- c("Female", "Male")
factor_survey_vector
msg = "Do not change the definition of survey_vector!" test_object("survey_vector", undefined_msg = msg, incorrect_msg = msg) msg = "Do not change or remove the code to create the factor vector." test_function("factor", "x", not_called_msg = msg, incorrect_msg = msg) # MC-note: ideally would want to test assign operator <-, and have it highlight whole line. # MC-note: or negate this test_student_typed, to highlight where they type this incorrect phrase # test_student_typed('c("Male", "Female")') test_object("factor_survey_vector", eq_condition = "equal", incorrect_msg = paste("Did you assign the correct factor levels to factor_survey_vector? Use levels(factor_survey_vector) <- c(\"Female\", \"Male\"). Remember that R is case sensitive!")) success_msg("Wonderful! Proceed to the next exercise.")
Faites attention à l’ordre dans lequel vous saisissez les niveaux du facteur. Astuce : regardez l’ordre dans lequel les niveaux s’affichent lorsque vous tapez levels(factor_survey_vector).
Résumer un facteur
Une fois ce cours terminé, l’une de vos fonctions préférées dans R sera summary(). Elle offre un aperçu rapide du contenu d’une variable :
summary(my_var)
Revenons à notre enquête : vous souhaitez connaître le nombre de réponses "Male" et le nombre de réponses "Female" dans votre étude. La fonction summary() vous donne la réponse.
Consignes
Demandez un summary() de survey_vector et de factor_survey_vector. Interprétez les résultats des deux vecteurs. Sont-ils tous deux aussi utiles dans ce cas ?
# Construisez factor_survey_vector avec des niveaux propres
survey_vector <- c("M", "F", "F", "M", "M")
factor_survey_vector <- factor(survey_vector)
levels(factor_survey_vector) <- c("Female", "Male")
factor_survey_vector
# Générez le résumé pour survey_vector
# Générez le résumé pour factor_survey_vector
# Construisez factor_survey_vector avec des niveaux propres
survey_vector <- c("M", "F", "F", "M", "M")
factor_survey_vector <- factor(survey_vector)
levels(factor_survey_vector) <- c("Female", "Male")
factor_survey_vector
# Générez le résumé pour survey_vector
summary(survey_vector)
# Générez le résumé pour factor_survey_vector
summary(factor_survey_vector)
msg = "Do not change anything about the first few lines that define survey_vector and factor_survey_vector." test_object("survey_vector", undefined_msg = msg, incorrect_msg = msg) test_object("factor_survey_vector", eq_condition = "equal", undefined_msg = msg, incorrect_msg = msg) msg <- "Have you correctly used summary() to generate a summary for %s?" test_output_contains("summary(survey_vector)", incorrect_msg = sprintf(msg, "survey_vector")) test_output_contains("summary(factor_survey_vector)", incorrect_msg = sprintf(msg, "factor_survey_vector")) success_msg("Nice! Have a look at the output. The fact that you identified \"Male\" and \"Female\" as factor levels in factor_survey_vector enables R to show the number of elements for each category.")
Appelez la fonction summary() sur survey_vector et sur factor_survey_vector, tout simplement !
Facteurs ordonnés
Comme "Male" et "Female" sont des niveaux non ordonnés (ou nominaux), R renvoie un avertissement indiquant que l’opérateur « supérieur à » n’a pas de sens. Comme vu précédemment, R attribue une valeur équivalente aux niveaux de tels facteurs.
Mais ce n’est pas toujours le cas ! Parfois, vous manipulerez des facteurs dont les catégories possèdent un ordre naturel. Dans ce cas, il faut s’assurer de transmettre cette information à R…
Supposons que vous dirigiez une équipe de cinq data analysts et que vous souhaitiez évaluer leurs performances. Pour cela, vous suivez leur rapidité, évaluez chaque analyste comme "slow", "medium" ou "fast", et enregistrez les résultats dans speed_vector.
Consignes
Pour commencer, affectez à speed_vector un vecteur de 5 entrées, une par analyste. Chaque entrée doit être soit "slow", "medium" ou "fast". Utilisez la liste ci-dessous :
- L’analyste 1 est medium,
- L’analyste 2 est slow,
- L’analyste 3 est slow,
- L’analyste 4 est medium et
- L’analyste 5 est fast.
Inutile d’indiquer qu’il s’agit déjà de facteurs.
# Créez speed_vector
speed_vector <-
# Créez speed_vector
speed_vector <- c("medium", "slow", "slow", "medium", "fast")
test_object("speed_vector",
incorrect_msg = "speed_vector should be a vector with 5 entries, one for each analyst's speed rating. Don't use capital letters; R is case sensitive!") success_msg("A job well done! Continue to the next exercise.")
Affectez à speed_vector un vecteur contenant les chaînes de caractères "slow", "medium" ou "fast".
Si vous souhaitez aller plus loin avec ce cours, voici le lien.
Découvrez aussi notre Factors in R Tutorial.