Corso
Se vuoi seguire il nostro corso gratuito Intro to R, ecco il link.
Livelli dei fattori
Quando ottieni un dataset per la prima volta, spesso noterai che contiene fattori con specifici livelli. Tuttavia, a volte vorrai cambiare i nomi di questi livelli per maggiore chiarezza o per altri motivi. R ti permette di farlo con la funzione levels():
levels(factor_vector) <- c("name1", "name2",...)
Un buon esempio è costituito dai dati grezzi forniti da un sondaggio. Una domanda comune in ogni questionario riguarda il sesso della persona che risponde. Qui, per semplicità, sono state registrate solo due categorie, "M" e "F". (Di solito servono più categorie per i dati da sondaggio; in ogni caso, si usa un fattore per memorizzare i dati categoriali.)
survey_vector <- c("M", "F", "F", "M", "M")
Registrare il sesso con le abbreviazioni "M" e "F" può essere comodo se stai raccogliendo dati con carta e penna, ma può creare confusione in fase di analisi. A quel punto, spesso vorrai cambiare i livelli del fattore in "Male" e "Female" invece di "M" e "F" per maggiore chiarezza.
Attenzione: l'ordine con cui assegni i livelli è importante. Se digiti levels(factor_survey_vector), vedrai che restituisce [1] "F" "M". Se non specifichi i livelli del fattore quando crei il vettore, R li assegnerà automaticamente in ordine alfabetico. Per mappare correttamente "F" a "Female" e "M" a "Male", i livelli devono essere impostati su c("Female", "Male"), in questo ordine.
Istruzioni
- Guarda il codice che costruisce un vettore fattoriale a partire da
survey_vector. Dovresti usarefactor_survey_vectornella prossima istruzione. - Cambia i livelli del fattore di
factor_survey_vectorinc("Female", "Male"). Fai attenzione all'ordine degli elementi del vettore.
# no pec
survey_vector <- c("M", "F", "F", "M", "M")
factor_survey_vector <- factor(survey_vector)
# Code to build factor_survey_vector
survey_vector <- c("M", "F", "F", "M", "M")
factor_survey_vector <- factor(survey_vector)
# Specify the levels of factor_survey_vector
levels(factor_survey_vector) <-
factor_survey_vector
# Code to build factor_survey_vector
survey_vector <- c("M", "F", "F", "M", "M")
factor_survey_vector <- factor(survey_vector)
# Specify the levels of 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.")
Fai attenzione all'ordine in cui devi digitare i livelli del fattore. Suggerimento: guarda l'ordine in cui i livelli vengono stampati quando digiti levels(factor_survey_vector).
Riepilogare un fattore
Dopo aver terminato questo corso, una delle tue funzioni preferite in R sarà summary(). Ti darà una panoramica rapida del contenuto di una variabile:
summary(my_var)
Tornando al nostro sondaggio, vorresti sapere quante risposte "Male" hai nel tuo studio e quante risposte "Female". La funzione summary() ti dà la risposta a questa domanda.
Istruzioni
Richiedi un summary() di survey_vector e factor_survey_vector. Interpreta i risultati di entrambi i vettori. In questo caso sono ugualmente utili?
# Build factor_survey_vector with clean levels
survey_vector <- c("M", "F", "F", "M", "M")
factor_survey_vector <- factor(survey_vector)
levels(factor_survey_vector) <- c("Female", "Male")
factor_survey_vector
# Generate summary for survey_vector
# Generate summary for factor_survey_vector
# Build factor_survey_vector with clean levels
survey_vector <- c("M", "F", "F", "M", "M")
factor_survey_vector <- factor(survey_vector)
levels(factor_survey_vector) <- c("Female", "Male")
factor_survey_vector
# Generate summary for survey_vector
summary(survey_vector)
# Generate summary for 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.")
Chiama la funzione summary() sia su survey_vector sia su factor_survey_vector, è tutto qui!
Fattori ordinati
Poiché "Male" e "Female" sono livelli di fattore non ordinati (o nominali), R restituisce un messaggio di avviso informandoti che l'operatore maggiore di non ha significato. Come visto in precedenza, R assegna lo stesso valore ai livelli per fattori di questo tipo.
Ma non è sempre così! A volte lavorerai anche con fattori che hanno un ordine naturale tra le categorie. In questo caso, dobbiamo assicurarci di passare questa informazione a R...
Supponiamo che tu stia guidando un team di ricerca composto da cinque data analyst e che tu voglia valutarne le prestazioni. Per farlo, ne monitori la velocità, valuti ciascun analyst come "slow", "medium" o "fast" e salvi i risultati in speed_vector.
Istruzioni
Come primo passo, assegna a speed_vector un vettore con 5 elementi, uno per ciascun analyst. Ogni elemento deve essere "slow", "medium" o "fast". Usa l'elenco seguente:
- L'analyst 1 è medium,
- l'analyst 2 è slow,
- l'analyst 3 è slow,
- l'analyst 4 è medium e
- l'analyst 5 è fast.
Non è ancora necessario specificare che si tratta di fattori.
# Create speed_vector
speed_vector <-
# Create 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.")
Assegna a speed_vector un vettore contenente le stringhe di caratteri "slow", "medium" o "fast".
Se vuoi imparare di più da questo corso, ecco il link.
Dai un'occhiata al tutorial sui fattori in R.

