Curso
Si quieres hacer nuestro curso gratuito Intro to R, aquí tienes el enlace.
Niveles de factores
Al trabajar por primera vez con un conjunto de datos, a menudo verás que incluye factores con ciertos niveles. Sin embargo, puede que te interese cambiar el nombre de esos niveles para que sean más claros u por otros motivos. R te permite hacerlo con la función levels():
levels(factor_vector) <- c("name1", "name2",...)
Un buen ejemplo es la información en bruto que obtienes de una encuesta. Una pregunta habitual en cualquier cuestionario es el sexo de la persona encuestada. Aquí, por simplicidad, solo se registraron dos categorías, "M" y "F". (En datos de encuestas normalmente necesitarás más categorías; en cualquier caso, usas un factor para almacenar los datos categóricos).
survey_vector <- c("M", "F", "F", "M", "M")
Anotar el sexo con las abreviaturas "M" y "F" puede ser práctico si recoges datos en papel, pero puede dar pie a confusiones al analizarlos. En ese momento, a menudo querrás cambiar los niveles del factor a "Male" y "Female" en lugar de "M" y "F" para que quede más claro.
Ojo: el orden en el que asignas los niveles importa. Si tecleas levels(factor_survey_vector), verás que muestra [1] "F" "M". Si no especificas los niveles del factor al crear el vector, R los asigna alfabéticamente. Para mapear correctamente "F" a "Female" y "M" a "Male", los niveles deben establecerse como c("Female", "Male"), en ese orden.
Instrucciones
- Revisa el código que construye un vector factor a partir de
survey_vector. Necesitarás usarfactor_survey_vectoren la siguiente instrucción. - Cambia los niveles del factor
factor_survey_vectorac("Female", "Male"). Fíjate en el orden de los elementos del vector.
# no pec
survey_vector <- c("M", "F", "F", "M", "M")
factor_survey_vector <- factor(survey_vector)
# Código para construir factor_survey_vector
survey_vector <- c("M", "F", "F", "M", "M")
factor_survey_vector <- factor(survey_vector)
# Especifica los niveles de factor_survey_vector
levels(factor_survey_vector) <-
factor_survey_vector
# Código para construir factor_survey_vector
survey_vector <- c("M", "F", "F", "M", "M")
factor_survey_vector <- factor(survey_vector)
# Especifica los niveles 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.")
Fíjate en el orden en el que tienes que escribir los niveles del factor. Pista: mira el orden en el que se imprimen los niveles al teclear levels(factor_survey_vector).
Resumir un factor
Cuando termines este curso, una de tus funciones favoritas en R será summary(). Te da una visión rápida del contenido de una variable:
summary(my_var)
Volviendo a nuestra encuesta, te gustaría saber cuántas respuestas "Male" tienes en tu estudio y cuántas "Female". La función summary() te da la respuesta.
Instrucciones
Pide un summary() de survey_vector y de factor_survey_vector. Interpreta los resultados de ambos vectores. ¿Son igual de útiles en este caso?
# Construye factor_survey_vector con niveles claros
survey_vector <- c("M", "F", "F", "M", "M")
factor_survey_vector <- factor(survey_vector)
levels(factor_survey_vector) <- c("Female", "Male")
factor_survey_vector
# Genera el resumen para survey_vector
# Genera el resumen para factor_survey_vector
# Construye factor_survey_vector con niveles claros
survey_vector <- c("M", "F", "F", "M", "M")
factor_survey_vector <- factor(survey_vector)
levels(factor_survey_vector) <- c("Female", "Male")
factor_survey_vector
# Genera el resumen para survey_vector
summary(survey_vector)
# Genera el resumen para 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.")
Llama a la función summary() tanto sobre survey_vector como sobre factor_survey_vector, ¡así de fácil!
Factores ordenados
Como "Male" y "Female" son niveles de un factor no ordenado (o nominal), R devuelve un aviso indicando que el operador mayor que no tiene sentido. Como ya viste, R asigna el mismo valor a los niveles en este tipo de factores.
¡Pero no siempre es así! A veces también trabajarás con factores que sí tienen un orden natural entre sus categorías. Si es el caso, tenemos que asegurarnos de pasar esa información a R...
Imagina que diriges un equipo de investigación con cinco analistas de datos y quieres evaluar su rendimiento. Para ello, mides su velocidad, evalúas a cada analista como "slow", "medium" o "fast", y guardas los resultados en speed_vector.
Instrucciones
Como primer paso, asigna a speed_vector un vector con 5 entradas, una por cada analista. Cada entrada debe ser "slow", "medium" o "fast". Usa la siguiente lista:
- La analista 1 es medium,
- El analista 2 es slow,
- El analista 3 es slow,
- La analista 4 es medium y
- El analista 5 es fast.
Todavía no hace falta especificar que son factores.
# Crea speed_vector
speed_vector <-
# Crea 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.")
Asigna a speed_vector un vector que contenga las cadenas "slow", "medium" o "fast".
Si quieres seguir aprendiendo con este curso, aquí tienes el enlace.
Echa un vistazo a nuestro tutorial de factores en R.
