PRIA practica 1 (Resuelta): RBase, Vectores, matrices y factores

Author

Jesús Turpín

Published

October 17, 2023

1. Vectores

1.1 Genera un vector con los números del 1 al 50 con 1:50 y guárdalo en una variable v1_50. Repítelo usando seq().

v1_50 <- 1:50
print(v1_50)
# con seq()
v1_50 <- seq(1,50)
print(v1_50)

1.2 Lo mismo que el anterior pero con incrementos de 0.5 {0.5,1,1.5, … 10} en la variable v1_50h (usa “by”).

v1_50h <- seq(1,50,by=0.5)
print(v1_50h)

1.3 Calcula el tamaño del vector anterior y guárdalo en tam_v1_50h.

tam_v1_50h <- length(v1_50h)
print(tam_v1_50h)

1.4 Describe el tipo de dato que devuelve la función length aplicada sobre tam_v1_50h

tipo_length <- class(tam_v1_50h)
print(tipo_length)
print(typeof(tam_v1_50h))
# Diferencia entre typeof y class. 
# typeof devuelve el tipo según la implementación interna y cómo se respresenta en memoria el objeto
# class está orientada al comportamiento de la función según el objeto

# Por ejemplo, 
class(data.frame(a=c(1,2), b=c(3,4))) #, genera un objeto data.frame (clase). Sin embargo, R implementa un data frame como un tipo especial de lista, por eso si llamamos a 
typeof(data.frame(a=c(1,2), b=c(3,4)))# , devuelve una lista.

1.5 Genera un vector de 10 elementos comprendidos entre 1 y 22 con incrementos iguales.

v1_22_10 <- seq(1,22,length=10)
print(v1_22_10)

1.6 vrep_1x4 <- Genera un vector de unos de tamaño 4 usando rep().

vrep_1x4 <- rep(1,4)
# vrep_1x4 <- rep(1, times=4) También válido
print(vrep_1x4)

1.7 vrep <- Genera un vector que cuente 3 veces del 1 al 5 usando rep() y sin usar seq().

vrep <- rep(1:5,3)
#vrep <- rep(1:5, times=3) También válido
#vrep <- rep(1:5, each=3) --> Esta opción no es correcta
print(vrep)

1.8 Crea un vector con los elementos del 1º a 4º y de 8º a 9º de v1_22_10.

sub_v1_22_10 <- c(v1_22_10[1:4],v1_22_10[8:9])
print(sub_v1_22_10)

2. Matrices

2.1 Construye una matriz de 3 filas que contenga los números del 1 al 9 ordenados por filas. \(\begin{pmatrix}1&2&3\\4&5&6\\7&8&9\end{pmatrix}\)

matrix(1:9, byrow = TRUE, nrow = 3)

2.2 Construye una matriz de 3 filas que contenga los números del 1 al 9 ordenados por columnas. \(\begin{pmatrix}1 & 4 & 7\\2 & 5 & 8\\3 & 6 & 9\end{pmatrix}\)

matrix(1:9, byrow = FALSE, nrow = 3)

2.3 Los siguientes vectores representan la recaudación en euros, el número de semanas en cartelera y la recaudación total de ciertas películas en los cines españoles durante. Fuente. PDF

the_creator <- c(702465, 1, 702465)
barbie <- c(61351, 11, 33935231)
campeonesx <- c(235394, 7, 1732961)

Crea una matriz de 9 elemenos concatenando los 3 vectores cuyas filas correspondan a cada película y las columnas tengan el mismo significado que los respectivos vectores. Guarda la matriz en la variable cine_29_01_oct

cine_29_01_oct <- matrix((c(the_creator, barbie, campeonesx)), nrow = 3, byrow = TRUE)
cine_29_01_oct

2.4 Usa las funciones typeof y class, pasándole como argumento la matriz. Vuelve a usarlas pero pasándole cine_29_01_oct[1,1]

typeof(cine_29_01_oct)
class(cine_29_01_oct)

typeof(cine_29_01_oct[1,1])
class(cine_29_01_oct[1,1])

2.5 Teniendo en cuenta los datos de los vectores del ejercicio 2.3:

Crea un vector con el significado de las columnas (rec_semana, semanas_cart, rec_total). Crea un vector con los nombres de las tres películas. Usa los vectores creados y a continuación utilizalos para nombrar las columnas y las filas de la matriz. Busca las dos funciones en R que permiten poner nombre a filas y columnas. Imprime ahora la matriz cine_29_01_oct con los nombres de filas y columnas asignados.

columnas <- c("rec_semana", "semanas_cart", "rec_total")

filas <- c("the_creator", "barbie", "campeonesx")

# Nombra las filas y columnas de la matriz
rownames(cine_29_01_oct) <- filas
colnames(cine_29_01_oct) <- columnas
cine_29_01_oct

2.6 Agrega una nueva columna a la matriz cine_29_01_oct, con el % de recaudación de la semana actual sobre el total.

# Código para calcular y agregar la nueva columna
perc_sem <- 100*cine_29_01_oct[, "rec_semana"]/cine_29_01_oct[, "rec_total"]
perc_sem
cine_29_01_oct <- cbind(cine_29_01_oct, perc_sem)
cine_29_01_oct

2.7 Localiza en la fuente de datos dos películas que estén en cartelera 2 semanas. Repite los pasos anteriores. ¿Cómo varía la recaudación de segunda semana respecto a la primera?

# Código para crear la nueva matriz
Cerrar_los_Ojos  <- c(67529, 2, 246146)
Mision_a_Marte <- c(87, 2, 723)
cine_2_sem <- matrix((c(Cerrar_los_Ojos, Mision_a_Marte)), nrow = 2, byrow = TRUE)
colnames(cine_2_sem) <- columnas
rownames(cine_2_sem) <- c("Cerrar los Ojos", "Mision a Marte")
perc_sem <- 100*cine_2_sem[, "rec_semana"]/cine_2_sem[, "rec_total"]
cine_2_sem <- cbind(cine_2_sem, perc_sem)
cine_2_sem
caida_2_sem <- 100-(100*(cine_2_sem[, "rec_semana"])/(cine_2_sem[, "rec_total"] - cine_2_sem[, "rec_semana"]))
caida_2_sem

2.8 Une las primera matriz con la segunda por filas

ambas <- rbind(cine_29_01_oct, cine_2_sem)
ambas

3. Factores

3.1 Tenemos el vector c(“Elefante”, “Girafa”, “Asno”, “Caballo”), obtén a partir de éste el vector de variables cualitativas

animals_vector <- c("Elephant", "Giraffe", "Donkey", "Horse")
factor_animals_vector <- factor(animals_vector)
factor_animals_vector

3.2 A partir del vector c(“High”, “Low”, “High”,“Low”, “Medium”), utiliza los niveles c(“Low”, “Medium”, “High”), aplica orden y guárdalo en el vector factor_temperature_vector

temperature_vector <- c("High", "Low", "High","Low", "Medium")
factor_temperature_vector <- factor(temperature_vector, order = TRUE,
                                    levels = c("Low", "Medium", "High"))
factor_temperature_vector

3.3 Aplica la función summary() a temperature_vector y factor_temperature_vector ¿Podrías explicar los resultados?

summary(temperature_vector)
summary(factor_temperature_vector)

Al convertir en factor, la función summary realiza el resumen estadístico, teniendo en cuenta que son variables categóricas