Cargamos librerías.
Imprimir los primeros seis renglones de starwars
## # A tibble: 6 x 14
## name height mass hair_color skin_color eye_color birth_year sex
## <chr> <int> <dbl> <chr> <chr> <chr> <dbl> <chr>
## 1 Luke… 172 77 blond fair blue 19 male
## 2 C-3PO 167 75 <NA> gold yellow 112 none
## 3 R2-D2 96 32 <NA> white, bl… red 33 none
## 4 Dart… 202 136 none white yellow 41.9 male
## 5 Leia… 150 49 brown light brown 19 fema…
## 6 Owen… 178 120 brown, gr… light blue 52 male
## # … with 6 more variables: gender <chr>, homeworld <chr>, species <chr>,
## # films <list>, vehicles <list>, starships <list>
Ejercicio 1
Por favor escribe un chunk de código con las funciones de {dplyr} que te permitan
Generar el siguiente tibble:
starwars %>%
select(name, height, hair_color, eye_color, species) %>%
filter(name %in% c("Rey", "Padmé Amidala", "Leia Organa",
"Dormé", "Cordé", "Beru Whitesun lars")) %>%
arrange(desc(name))## # A tibble: 6 x 5
## name height hair_color eye_color species
## <chr> <int> <chr> <chr> <chr>
## 1 Rey NA brown hazel Human
## 2 Padmé Amidala 165 brown brown Human
## 3 Leia Organa 150 brown brown Human
## 4 Dormé 165 brown brown Human
## 5 Cordé 157 brown brown Human
## 6 Beru Whitesun lars 165 brown blue Human
Ejercicio 2
Por favor explica qué estoy haciendo en cada línea del siguiente chunk de código.
starwars %>%
#Selecciona el objeto starwars, que es una base de datos
select(name, height, mass) %>%
#Solo conserva las columnas (variables) que se llaman name, height y mass.
mutate(variable_1 = rank(-height, ties.method = "first"),
#Agrega una variable (columna) al final del tibble, que se llame variable_1, que sea un ranking respecto a la altura en orden descendente (de mayor a menor). Además, para desempatar entre quienes tengan alturas iguales, usa el criterio de quién estaba antes en la lista (posición menor en el tibble).
variable_2 = mean(mass)) %>%
# Agrega al tibble también (esto todavía esta dentro del mutate) una variable después de la anterior que se llame variable_2 y que contenga el promedio de la masa de todas las observaciones.
arrange(-height) %>%
#Ordena las observaciones en orden descendente (de mayor a menor) según su altura (el valor de la variable height).
rename(var_1 = variable_1,
#Cambia el nombre de la variable "variable_1" por el nombre "var_1"
var_2 = variable_2) %>%
##Cambia el nombre de la variable "variable_2" por el nombre "var_2"
filter(var_1 < 11)## # A tibble: 10 x 5
## name height mass var_1 var_2
## <chr> <int> <dbl> <int> <dbl>
## 1 Yarael Poof 264 NA 1 NA
## 2 Tarfful 234 136 2 NA
## 3 Lama Su 229 88 3 NA
## 4 Chewbacca 228 112 4 NA
## 5 Roos Tarpals 224 82 5 NA
## 6 Grievous 216 159 6 NA
## 7 Taun We 213 NA 7 NA
## 8 Rugor Nass 206 NA 8 NA
## 9 Tion Medon 206 80 9 NA
## 10 Darth Vader 202 136 10 NA
Ejercicio 3
Copia y pega el chunk del ejercicio anterior y por favor dinos:
¿Cuál es el valor de var_2?
R: Es NA, en todas sus observaciones.
¿Por qué es este valor?
_Porque en al menos una observación del tibble, el valor de mass (su masa) _es un NA.__ Como los NAs no pueden operacionalizarse y además son contagiosos, el promedio no puede obtenerse si estos son tomados en cuenta.
Si tuvieras que ofrecer una respuesta numérica, ¿qué cambio le harías al código para conseguirlo?
R: La función mean() tiene el argumento na.rm, que si se define como T o TRUE no tomará en cuenta para el cálculo todos los valores NA.
Esto se resovería como variable_2 = mean(mass, na.rm = T)).
Otra alternativa sería también filtrar las observaciones que tienen NAs dentro de la variable de interés. La diferencia con la solución anterior consiste en que borramos renglones que podrían tener otros datos de interés para futuros cálculos.
Ejercicio 4
Por favor responde las siguientes preguntas (debes sustentar tus respuestas con el código correspondiente):
- ¿Cuánto mide Chewbacca?
altura_chubaca <- starwars %>%
select(name, height) %>%
filter(name == "Chewbacca")
print(paste0("La altura de Chewbacca es: ", altura_chubaca))## [1] "La altura de Chewbacca es: Chewbacca"
## [2] "La altura de Chewbacca es: 228"
- ¿Cuántos personajes miden más que él?
## # A tibble: 87 x 3
## name height pos_altura
## <chr> <int> <dbl>
## 1 Yarael Poof 264 1
## 2 Tarfful 234 2
## 3 Lama Su 229 3
## 4 Chewbacca 228 4
## 5 Roos Tarpals 224 5
## 6 Grievous 216 6
## 7 Taun We 213 7
## 8 Rugor Nass 206 8.5
## 9 Tion Medon 206 8.5
## 10 Darth Vader 202 10
## # … with 77 more rows
Con el código anterior, podemos observar que Chewbacca está en cuarto lugar, por lo que hay 3 personajes que miden más que él.
- ¿Cuál es el personaje menos alto?
## # A tibble: 1 x 2
## name height
## <chr> <int>
## 1 Yoda 66
- ¿Cuál es la altura promedio de todos los personajes?
## # A tibble: 1 x 1
## altura_prom
## <dbl>
## 1 174.
Para los personajes de los que hay datos, la altura promedio es 174.
- ¿Cuál es la altura promedio del género masculino y femenino?
## `summarise()` ungrouping output (override with `.groups` argument)
## # A tibble: 3 x 2
## gender altura_prom
## <chr> <dbl>
## 1 feminine 165.
## 2 masculine 177.
## 3 <NA> 181.
Este código revela que para el género femenino, la altura promedio es 165, para el masculino, es 177, y hay personajes sin género cuya altura promedio es 181.
Ejercicio 5
Por favor ayuda al viejo Segasi a corregir todos los problemas que tiene el siguiente chunk de código:
- Dejó un espacio entre la n y el
%. Aquí utilizó el operador%in%en lugar de utilizar la pipa,%>%, que sería el operador indicado.
Usó la función select en lugar de filter para dejar solo las observaciones donde el color de ojos es azul y el sexo es masculino.
Utilizó el operador
=en lugar de==para hacer una comparación.No puso los valores de las observaciones entre comillas, por lo que R piensa que son objetos y no los encuentra.
Dejó un espacio entre la n y el %. Utilizó el operador %in% en lugar de la pipa,
%>%
Usó la función filter en lugar de select para seleccionar las columnas (variables) de interés.
No cerró el paréntesis que comienza en la función
filter().Dejó un espacio entre la n y el
%. Usó el operador%in%en lugar de la pipa,%>%.
Esta línea se ve correcta.
Debajo de las correciones, está anotada la línea con el código correcto, según lo que interpreto que quiso hacer el viejo Segasi en su chunk de código.