Tema6-Ejercicio1 Respuestas

Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 7

Tarea

Pregunta 1
Describe cómo están organizadas las variables y observaciones en cada una de las cinco familias de tablas
table1,. . . table5 de tidyverse.
• Table 1: cada fila representa una combinación (país, año). Las columnas cases y population
contienen los valores de esas variables.
• Table 2: cada fila representa una combinación (país, año, variable). La columna count contiene los
valores de las variables cases y population en filas separadas.
• Table 3: cada fila representa una combinación (país, año). La columna rate proporciona los valores
de ambos cases y population en una cadena con formato cases/population.
• Table 4: Se divide en dos tablas (a y b). La tabla table4a contiene los valores de casos y table4b
contiene los valores de población. Dentro de cada tabla, cada fila representa un país, cada columna
representa un año y las celdas son el valor de la variable de la tabla para ese país y año.
• Table 5: Es como la table3 pero con la columna year separada a la mitad, los 2 primeros dígitos
forman la columna century y los dos últimos la columna year.

Pregunta 2
Calcula la columna de rate para table2 y para la combinación de table4a y table4b sin usar las funciones
gather o spread.
Se tienen que llevar a cabo los siguiente pasos:
• Extraiga el número de casos de tuberculosis por país por año.
• Extraiga la población coincidente por país por año.
• Divida los casos por población y multiplíquelos por 10000.
• Guárdelo nuevamente en el lugar apropiado.

1
Pregunta 3
Recrea el plot que hemos hecho en la clase para mostrar los casos de infección a lo largo de los años usando
la table2 en lugar de la table1. ¿En qué difiere el proceso?

2
Pregunta 4
Las funciones spread y gather no son absolutamente simétricas. Toma el siguiente ejemplo para explicarlo
correctamente:

roi <- tibble(


year = c(rep(2016,4), rep(2017,4), 2018),
quarter = c(rep(c(1,2,3,4),2),1),
return = rnorm(9, mean = 0.5, sd = 1)
)

roi %>%
spread(year, return) %>%
gather("year", "return", ‘2016‘:‘2018‘)

Las funciones spread y gather no son perfectamente simétricas porque la información del tipo de columna no
se transfiere entre ellas. En la tabla original, la columna año era numérica, pero después de ejecutar spread() y
gather() es un vector de caracteres. Esto se debe a que los nombres de las variables siempre se convierten en
un vector de caracteres mediante gather().

Sucede lo mismo con pivet_wider() y pivot_longer(), no son perfectamente simétricas porque la información
del tipo de columna se pierde cuando un marco de datos se convierte de ancho a largo. La función
pivot_longer() apila varias columnas que pueden haber tenido varios tipos de datos en una sola columna con
un único tipo de datos. Esta transformación descarta los tipos de datos individuales de las columnas
originales. La función pivot_wider() crea nombres de columnas a partir de valores en la columna. Estos
nombres de columnas siempre serán tratados como carácter valores, por pivot_longer() lo que si la variable
original utilizada para crear los nombres de las columnas no tenía un carácter tipo de datos, el proceso de ida
y vuelta no reproducirá el mismo conjunto de datos.

Pregunta 5
Las funciones de spread y gather comparten un argumento convert. Investiga su uso.
Convert = TRUE sirve para que se conviertan los datos al aplicar las funciones.
Con pivet_wider() y pivot_longer() se utiliza la función names_transform:

Pregunta 6
Sin ejecutar, investiga por qué falla el siguiente código
table4a %>% gather(1999,2000, key = "year", value = "cases")
Los nombres de columnas tienen que estar entre backsticks (comillas invertidas o ``) para ser
detectados por el sistema, ya que de esta manera los interpreta como números. También sirven las
comillas dobles para meter como cadena de texto (strings).

3
Pregunta 7
people <- tribble(
~name, ~key, ~value,
#-------------|-------|-------
"Juan Gabriel", "age", 30,
"Juan Gabriel", "weight", 71,
"Juan Gabriel", "age", 18,
"Ricardo", "age", 55,
"Ricardo", "age", 75,
)

Explica por qué falla la función spread aplicada a la siguiente tribble:


¿Crees que añadiendo alguna nueva columna se soluciona el problema? Di cual.
Hacer un spread / pivot_wider del tibble falla porque hay dos filas con el campo age de Juan Gabriel, es
decir, no identifican filas de forma única.
Se podría solucionar añadiendo una nueva columna observación que contara si es la primera, la segunda
vez que se mide la edad y/o peso del individuo:
people2 <- people %>%
group_by(name, key) %>%
mutate(obs = row_number())
Con la función anterior, la combinación de name y obs identificará de forma única las filas en el marco de
datos amplio.

Pregunta 8
Limpia la siguiente tibble con la función de spread o gather que creas más útil.

pregnancy <- tribble(


~pregnant, ~male, ~female,
#--------|------|---------
"yes", NA, 32,
"no", 85, 43
)
Indica cuales son las nuevas variables después de aplicar la función.
Se necesita un gather o piver_longer. Las variables son:
• sex (“male”, “female”)
• pregnant (“yes”, “no”)
• count

4
Pregunta 9
Investiga los parámetros extra y fill de la función separate. Experimenta con varias opciones de las mismas
con las dos tibbles siguientes:

tibble(x = c("a,b,c", "d,e,f,g","h,i,j")) %>%


separate(x, c("x", "y", "z"))

tibble(x = c("a,b,c", "d,e","f,g,h")) %>%


separate(x, c("x", "y", "z"))

El argumento extra le dice a separate() qué hacer si hay demasiadas piezas, y el argumento fill le dice qué
hacer si no hay suficientes. De forma predeterminada, separate() elimina valores adicionales con una
advertencia.
Agregar el argumento extra = "drop" produce el mismo resultado pero sin la advertencia.
Al configurar extra = "merge" en el 2º caso, los valores adicionales no se dividen, por lo que "f,g" aparecen
en la columna tres.
El argumento fill = “right” elimina la advertencia que sale en separate().
La opción fill = "left"también llena los valores faltantes sin emitir una advertencia, pero esta vez desde el
lado izquierdo.

Pregunta 10
unite y separate tienen un argumento llamado remove. ¿Cómo funciona? ¿Se te ocurre cuando lo pondrías a
false?
El argumento “remove” descarta las columnas de entrada en el dataframe resultante. Se debe poner en
FALSE si se desea crear una nueva variable, pero conservar la anterior.

Pregunta 11
Compara las funciones separate/unite y extract. ¿Por qué existen tres variantes de separación (basándonos
en posición, separador o por grupos) pero solamente una para unir?
Tanto separate() como extract() convierten una columna en muchas columnas. Sin embargo, unite() convierte
muchas columnas en una, con la opción de elegir un separador para incluir entre los valores de las columnas.

5
La función separate() divide una columna en varias columnas por separador, si el argumento sep es un vector
de caracteres, o por posiciones de caracteres, si sep es numérico.
La función extract() utiliza una expresión regular para especificar grupos en un vector de caracteres y dividir
ese vector de caracteres único en varias columnas. Esto es más flexible que separate() porque no requiere un
separador común ni posiciones de columna específicas.

Ejemplo en el que separate() no funciona y extract() sí:

En otras palabras, con extract() y separate() solo se puede elegir una columna, pero hay muchas opciones
para dividir esa única columna en diferentes columnas.
Con unite(), hay muchas opciones en cuanto a qué columnas incluir, pero solo una opción en cuanto a cómo
combinar sus contenidos en un solo vector.

6
Pregunta 12
Compara el argumento fill de spread()/pivot_wider() y el de complete(). Investiga también el argumento
direction de la función fill.
El argumento value_fill en pivot_wider() y el argumento fill para complete() establecen valores para
reemplazar NA.
Ambos argumentos aceptan listas con nombres para establecer valores para cada columna. Además, el
argumento value_fill de pivot_wider() acepta un único valor.

En complete(), el argumento de relleno también establece un valor para reemplazar los NA, pero se
denomina “list”, lo que permite diferentes valores para diferentes variables. Además, ambos casos
reemplazan los valores faltantes tanto implícitos como explícitos.

El argumento ·direction” en “fill” determina si los valores NA deben reemplazarse por el valor anterior que
no falta ("down") o el siguiente valor que no falta ("up").

También podría gustarte