Este documento esta publicado en https://rpubs.com/psantizo/1179508

Parte 1

1. ¿Cómo generaría un arreglo aleatorio de 250 elementos con los colores primarios?

colores_primarios <- c("rojo", "amarillo", "azul")

arreglo_aleatorio <- sample(colores_primarios, 250, replace = TRUE)

# Se imprimen los primeros 50 elementos del arreglo
print(arreglo_aleatorio[1:50])
##  [1] "rojo"     "rojo"     "rojo"     "amarillo" "azul"     "rojo"    
##  [7] "rojo"     "rojo"     "amarillo" "azul"     "azul"     "azul"    
## [13] "rojo"     "amarillo" "azul"     "amarillo" "azul"     "amarillo"
## [19] "rojo"     "amarillo" "amarillo" "azul"     "amarillo" "azul"    
## [25] "rojo"     "azul"     "azul"     "azul"     "amarillo" "rojo"    
## [31] "rojo"     "azul"     "rojo"     "amarillo" "azul"     "amarillo"
## [37] "amarillo" "rojo"     "azul"     "rojo"     "amarillo" "azul"    
## [43] "rojo"     "amarillo" "amarillo" "amarillo" "rojo"     "rojo"    
## [49] "azul"     "azul"

2. Dado un arreglo de 120000 elementos de números enteros entre 40 y 70, ¿Cómo haría para obtener la desviación estándar de aquellos números que son mayores a 55 y menores a 64?

# Se crear un arreglo aleatorio con números enteros entre 40 y 70
arreglo_uniforme <- sample(40:70, 120000, replace = TRUE)
print("Primeros 10 elementos del arreglo")
## [1] "Primeros 10 elementos del arreglo"
print(arreglo_uniforme[1:10])
##  [1] 70 69 54 54 51 70 52 63 54 56
# hacer un subconjunto filtrando los números mayores a 55 y menores a 64
num_54_64 <- arreglo_uniforme[which(arreglo_uniforme > 54 & arreglo_uniforme < 64)]
print("Filtrando los números mayores a 54 y menores  a 64, sus primeros 10 elementos son")
## [1] "Filtrando los números mayores a 54 y menores  a 64, sus primeros 10 elementos son"
print(num_54_64[1:10])
##  [1] 63 56 59 55 55 56 59 60 59 58
sd_54_64 <- sd(num_54_64)
print(paste("La desviación estándar es", round(sd_54_64,2), sep=" "))
## [1] "La desviación estándar es 2.59"

3. Suponga que se almacena en una variable un arreglo con todos los números de carnet de los estudiantes del Instituto de Investigación de Operaciones de la universidad en forma de string, los carnets tiene al inicio dos caracteres que identifican el año en el que la persona entró a la universidad por ejemplo: 19004528 hacer referencia a una persona que ingreso en el año 2019, 06009878 hace referencia a una persona que ingreso que el año 2006, ¿Cómo haría para contar la cantidad de alumnos por año?

# para el ejemplo se crea un arreglo aleatorio de carnes 
cantidad_carnets <- 5000
anio_inicial <- 2001
anio_final <- 2023

anios <- substr(sample(anio_inicial:anio_final, cantidad_carnets, replace = TRUE),3,4)
print("Los primeros 10 elementos del arreglo aleatorio de los anios son")
## [1] "Los primeros 10 elementos del arreglo aleatorio de los anios son"
print(anios[1:10])
##  [1] "10" "23" "13" "02" "08" "23" "13" "09" "14" "22"
# se generan los numeros  sin remplazo para que no se repitan
numeros_aleatorios <- sample(10000:99999, cantidad_carnets, replace = FALSE)

# se crean los carnets
carnets_aleatorios <- paste0(anios, numeros_aleatorios)
print("Los primeros 10 elementos del arreglo aleatorio de los carnets son")
## [1] "Los primeros 10 elementos del arreglo aleatorio de los carnets son"
print(carnets_aleatorios[1:10])
##  [1] "1058276" "2373370" "1379433" "0261830" "0841961" "2379353" "1336881"
##  [8] "0918180" "1454240" "2245543"
# Se realiza el análisis:
## Se filtra el los primeros dos dígitos que indica el anio
anio_de_ingreso <- substr(carnets_aleatorios, 1, 2)
# Se crea una tabla que cuenta la cantidad de alumnos por anio
cantidad_alumnos <- table(anio_de_ingreso)

print("La cantidad de alumnos por anio son:")
## [1] "La cantidad de alumnos por anio son:"
print(cantidad_alumnos)
## anio_de_ingreso
##  01  02  03  04  05  06  07  08  09  10  11  12  13  14  15  16  17  18  19  20 
## 215 212 241 207 212 230 211 217 180 212 220 231 225 205 209 216 257 233 200 209 
##  21  22  23 
## 215 193 250
print("La primera fila indica el anio y la segunda el número de alumnos por anio")
## [1] "La primera fila indica el anio y la segunda el número de alumnos por anio"

4. Define el vector y = (1, 3, 5, 7) utilizando la función c(). ¿Cómo lo harías con la función seq()?

#Crean el vector de forma manual
y <- c(1,3,5,7)
print(y)
## [1] 1 3 5 7
# Crear el vector con la funcion seq()

y <- seq(1,7,2)
print(y)
## [1] 1 3 5 7

5. Si b <- list(a=1:10, c=“Hola”, d=“XX”), escriba una expresión en R que devuelva todos los elementos de la lista excepto los elementos 4,6,7,8 del vector a.

#Se define b
b <- list(a=1:10, c="Hola", d="XX")
# se remueven los valores de la lista b 
b$a <- b$a[-c(4, 6,7,8)]

b
## $a
## [1]  1  2  3  5  9 10
## 
## $c
## [1] "Hola"
## 
## $d
## [1] "XX"

6. Dado los siguientes vectores, muestre el código en R necesario para declarar y calcular el promedio, deviación estándar, mediana, moda y sumatoria total para los siguientes vectores:

# Los vectores son

x <- c(8,7,6,5)
y <- c(3,3, 3, 3, 3, 3, 3, 3, 2, 2)
z <-  c(1, 1.75, 2.5, 3.25, 4)
# Medias
mean_x <- mean(x)
mean_y <- mean(y)
mean_z <- mean(z)

#Desviacion estándar
sd_x <- sd(x)
sd_y <- sd(y)
sd_z <- sd(z)

#mediana
median_x <- median(x)
median_y <- median(y)
median_z <- median(z)

#moda


mode_x <- as.numeric(names(which.max(table(z))))
mode_y <- as.numeric(names(which.max(table(y))))
mode_z <- as.numeric(names(which.max(table(z))))

# suma
sum_x <- sum(x)
sum_y <- sum(y)
sum_z <- sum(z)
  • Para el vector x su media es 6.5, su desviación estándar 1.29, su mediana 6.5,para la moda ningun valor se repite, y la suma del vector es 26

  • Para el vector y su media es 2.8, su desviación estándar 0.42, su mediana 3, su moda 3, y la suma del vector es 28

  • Para el vector z su media es 2.5, su desviación estándar 1.19, su mediana 2.5,para la moda ningun valor se repite, y la suma del vector es 12.5

7. Sabemos que para sumar vectores estos deben tener la misma longitud. Sin embargo R trabaja de manera distinta. Defina los vectores x = (1, 2, 3, 4, 5, 6), y = (7, 8), z = (9, 10, 11, 12). Calcula:

x <-  c(1, 2, 3, 4, 5, 6)
y <- c(7, 8)
z <- c(9, 10, 11, 12)

# a. x + x
print(x+x)
## [1]  2  4  6  8 10 12
#b. x+y
print(x+y)  
## [1]  8 10 10 12 12 14
#c. responda que ha hecho R
# R creo tranformo el vector y de la misma longitud que el de x de la forma>
yy <- c(y,y,y)
print(yy)
## [1] 7 8 7 8 7 8
# posteriormente sumo los vectores
print(x+yy)
## [1]  8 10 10 12 12 14

8. Dada la variable string <- “Hola Mundo”, escriba una instrucción en R que devuelva la siguiente salida:

string <- "Hola Mundo"

# se hace split con espacio
split_str <- strsplit(string, " ")[[1]]

# se incluyen los elementos en una lista
lista_str <- list(split_str[1],split_str[2])
lista_str
## [[1]]
## [1] "Hola"
## 
## [[2]]
## [1] "Mundo"

Parte 2

Para entregar este ejercicio deberá subir un archivo .R con la pregunta en forma de comentario, el código que generó y su respuesta como comentario. Esta ejercicio requerirá un poco de investigación, no puede utilizar ninguna otra cosa que no se le haya enseñado en clase como librerías, funciones y demás, utilice la menor cantidad de líneas posible (1 línea idealmente), NO puede utilizar ninguna estructura de control de flujo (ciclos y condicionales). Antes de realizar este ejercicio limpie el Entorno de variales que ha construido hasta ahora, cargue el archivo data.Rdata en RStudio. Al cargarlo notará que existe una única variable llamada info_estidiantes, para dicha variable responda la siguientes preguntas:

Se limpia el entorno y se carga la información

rm(list = ls())
graphics.off()
load("C:/Users/joshp/Desktop/Lab1/data.RData")

1. ¿Qué tipo de dato es info_estudiantes?

typeof(info_estudiantes)
## [1] "list"
# El tipo de datos es una lista

2. ¿Cuantos elementos tiene info_estudiantes?

length(info_estudiantes)
## [1] 3
# Es una lista con 3 elementos, cada elemento de la lista puede contener un vector o una lista.

3. ¿Qué representa cada uno de los elementos de info_estudiantes?

str(info_estudiantes)
## List of 3
##  $ carnet  : chr [1:8000] "17009555" "17001626" "18004745" "19002855" ...
##  $ promedio: int [1:8000] 65 89 88 68 90 79 71 52 97 92 ...
##  $ tipo    : Factor w/ 4 levels "A","B","C","D": 4 1 1 3 1 1 3 3 3 4 ...
# La lista contiene en el primer objeto con tipo carácter números de carnet, en el segundo promedio, y en el tercero un tipo A,B,C o D, para cada carnet.

4. ¿Cuál es la media de los estudiantes ingresados en el año 2019?

# vector con los promedio de los estudiantes del 2019
promedio_19 <- mean(info_estudiantes$promedio[substr(info_estudiantes$carnet,1,2)== "19"])
print(paste("El promedio de los estudiantes ingresados en el anio 2019 es de", round(promedio_19,2),sep=" "))
## [1] "El promedio de los estudiantes ingresados en el anio 2019 es de 70.86"

5. ¿Cuál es la suma de desviación estándar de los estudiantes que ingresaron en el año 2016 y 2018?

# vector con los promedio de los estudiantes del 2019
sd_16<- sd(info_estudiantes$promedio[substr(info_estudiantes$carnet,1,2)== "16"])
sd_18<- sd(info_estudiantes$promedio[substr(info_estudiantes$carnet,1,2)== "18"])
suma_sd <- round(sd_16 + sd_18,2)
print(paste("La desviacion estandar de los estudiantes que ingresaron en el 2016 es de",round(sd_16,2),sep=" "))
## [1] "La desviacion estandar de los estudiantes que ingresaron en el 2016 es de 17.37"
print(paste("La desviacion estandar de los estudiantes que ingresaron en el 2018 es de",round(sd_18,2),sep=" "))
## [1] "La desviacion estandar de los estudiantes que ingresaron en el 2018 es de 17.76"
print(paste("La suma es ", suma_sd))
## [1] "La suma es  35.13"

6. ¿Cuál es el mínimo de notas de aquellos estudiantes donde su carnet termina con los números 45 a 48?

# Se filtran los carnets que terminan en los numeros de 45 a 48.
# luego se obtiene el valor minimo
min_45_48 <- min(info_estudiantes$promedio[substr(info_estudiantes$carnet,7,8) %in% c("45","46","47","48")])
print(paste("la nota minima de los estudiantes donde su carnet termina con los numero 45 a 48 es de ", min_45_48))
## [1] "la nota minima de los estudiantes donde su carnet termina con los numero 45 a 48 es de  40"

7. ¿Cuál es la probabilidad de que un estudiante tipo A tenga una nota mayor a 85?

# se obtienen los estudiantes tipo A, sus notas y los que obtuvieron notas mayorse a 85
est_A <- length(info_estudiantes$promedio[info_estudiantes$tipo== "A"])
notas_A <- info_estudiantes$promedio[info_estudiantes$tipo== "A"]
mayor_85 <- notas_A[notas_A>= 85] 
prob_A <- length(mayor_85)/length(notas_A)

print(paste("La probabiliad de un estudiante tipo A tenga nota mayor a 85 es de ",round(prob_A,3)))
## [1] "La probabiliad de un estudiante tipo A tenga nota mayor a 85 es de  0.267"

8. ¿Cuál es la probabilidad de que un estudiante tipo C haya ingresado en el año 2017 o 2019?

# se obtienen los estudiantes tipo c
est_C <- length(info_estudiantes$promedio[info_estudiantes$tipo== "C"])
anio_C <- substr(info_estudiantes$carnet[info_estudiantes$tipo== "C"],1,2)
anio_17_o_19 <- anio_C[anio_C %in%c("17","19")] 
prob_C <- length(anio_17_o_19)/length(anio_C)
print(paste("La probabiliad de un estudiante tipo C haya ingresado ene l anio 2017 o 2019 es de ",round(prob_C,3)))
## [1] "La probabiliad de un estudiante tipo C haya ingresado ene l anio 2017 o 2019 es de  0.497"