PARTE 1

Para esta y la siguiente parte deberá subir su solución en un archivo .R colocando la pregunta completa como comentario y su respuesta que considere adecuada.

Escriba el código de R necesario para resolver los siguientes incisos trate de usar la menor cantidad de líneas posible.

  1. ¿Cómo generaría un arreglo aleatorio de 250 elementos con los colores primarios?
# Definir los colores primarios
colores_primarios <- c("rojo", "azul", "amarillo")

# Generar un arreglo aleatorio de 250 elementos con los colores primarios
arreglo_aleatorio <- sample(colores_primarios, 250, replace = TRUE)

# Mostrar el arreglo resultante
arreglo_aleatorio
##   [1] "azul"     "azul"     "rojo"     "azul"     "azul"     "azul"    
##   [7] "rojo"     "rojo"     "rojo"     "azul"     "rojo"     "amarillo"
##  [13] "rojo"     "rojo"     "azul"     "rojo"     "azul"     "azul"    
##  [19] "azul"     "rojo"     "rojo"     "rojo"     "rojo"     "rojo"    
##  [25] "rojo"     "amarillo" "rojo"     "amarillo" "rojo"     "azul"    
##  [31] "azul"     "azul"     "azul"     "rojo"     "amarillo" "rojo"    
##  [37] "amarillo" "amarillo" "amarillo" "azul"     "rojo"     "rojo"    
##  [43] "azul"     "amarillo" "rojo"     "azul"     "rojo"     "rojo"    
##  [49] "azul"     "rojo"     "amarillo" "amarillo" "azul"     "azul"    
##  [55] "rojo"     "azul"     "azul"     "rojo"     "rojo"     "azul"    
##  [61] "amarillo" "amarillo" "amarillo" "amarillo" "amarillo" "azul"    
##  [67] "azul"     "rojo"     "amarillo" "rojo"     "azul"     "rojo"    
##  [73] "azul"     "amarillo" "azul"     "azul"     "rojo"     "azul"    
##  [79] "azul"     "amarillo" "rojo"     "rojo"     "amarillo" "azul"    
##  [85] "azul"     "amarillo" "amarillo" "rojo"     "azul"     "azul"    
##  [91] "rojo"     "amarillo" "rojo"     "rojo"     "amarillo" "amarillo"
##  [97] "azul"     "rojo"     "rojo"     "rojo"     "azul"     "rojo"    
## [103] "rojo"     "amarillo" "amarillo" "azul"     "rojo"     "rojo"    
## [109] "rojo"     "rojo"     "amarillo" "azul"     "azul"     "azul"    
## [115] "amarillo" "amarillo" "azul"     "amarillo" "amarillo" "amarillo"
## [121] "rojo"     "amarillo" "azul"     "rojo"     "amarillo" "amarillo"
## [127] "amarillo" "amarillo" "azul"     "rojo"     "rojo"     "rojo"    
## [133] "rojo"     "amarillo" "rojo"     "azul"     "amarillo" "azul"    
## [139] "rojo"     "rojo"     "azul"     "amarillo" "rojo"     "amarillo"
## [145] "rojo"     "azul"     "azul"     "azul"     "rojo"     "azul"    
## [151] "azul"     "rojo"     "rojo"     "rojo"     "azul"     "azul"    
## [157] "azul"     "azul"     "amarillo" "amarillo" "azul"     "rojo"    
## [163] "azul"     "amarillo" "rojo"     "amarillo" "amarillo" "azul"    
## [169] "azul"     "amarillo" "azul"     "rojo"     "rojo"     "azul"    
## [175] "azul"     "azul"     "rojo"     "azul"     "amarillo" "azul"    
## [181] "amarillo" "amarillo" "amarillo" "rojo"     "amarillo" "rojo"    
## [187] "amarillo" "rojo"     "rojo"     "azul"     "amarillo" "amarillo"
## [193] "rojo"     "amarillo" "amarillo" "azul"     "azul"     "azul"    
## [199] "azul"     "azul"     "amarillo" "azul"     "azul"     "rojo"    
## [205] "rojo"     "azul"     "rojo"     "amarillo" "rojo"     "rojo"    
## [211] "rojo"     "rojo"     "rojo"     "rojo"     "azul"     "azul"    
## [217] "rojo"     "azul"     "amarillo" "amarillo" "rojo"     "amarillo"
## [223] "amarillo" "rojo"     "azul"     "rojo"     "amarillo" "amarillo"
## [229] "amarillo" "amarillo" "rojo"     "amarillo" "azul"     "azul"    
## [235] "azul"     "amarillo" "azul"     "amarillo" "rojo"     "azul"    
## [241] "rojo"     "rojo"     "amarillo" "azul"     "rojo"     "azul"    
## [247] "azul"     "rojo"     "amarillo" "rojo"
  1. 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?
# Generar el arreglo de 120,000 elementos de números enteros entre 40 y 70
arreglo <- sample(40:70, 120000, replace = TRUE)

# Filtrar los números que son mayores a 55 y menores a 64
numeros_filtrados <- arreglo[arreglo > 55 & arreglo < 64]

# Calcular la desviación estándar de los números filtrados
desviacion_estandar <- sd(numeros_filtrados)

# Mostrar la desviación estándar
desviacion_estandar
## [1] 2.292896
  1. 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?
# Tamano de la muestra
n <-2500

# Generar muestra de carnets
ids<-as.integer(runif(n, min=1000, max=9999))
anio<-sample(c(1700, 1800, 1900, 2000, 2100, 2200, 2300, 2400), n, replace = TRUE)
carnets<-paste(anio, ids, sep='')


# Extraer los primeros dos dígitos (año) de cada número de carnet
anio_de_ingreso <- substr(carnets, 1, 2)

# Contar la cantidad de alumnos por año
cantidad_por_anio <- table(anio_de_ingreso)

# Mostrar el resultado
cantidad_por_anio
## anio_de_ingreso
##  17  18  19  20  21  22  23  24 
## 327 321 316 307 314 292 337 286
  1. Define el vector y = (1, 3, 5, 7) utilizando la función c(). ¿Cómo lo harías con la función seq()?
# Definir vector con seq
y <- seq(from = 1, to = 7, by = 2)
y
## [1] 1 3 5 7
  1. 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.
# Definir la lista b
b <- list(a = 1:10, c = "Hola", d = "XX")

# Crear un nuevo vector a con los elementos 4, 6, 7 y 8 del vector original
nuevo_a <- b$a[-c(4, 6, 7, 8)]

# Actualizar la lista b con el nuevo vector a
b$a <- nuevo_a

# Mostrar la lista b modificada
b
## $a
## [1]  1  2  3  5  9 10
## 
## $c
## [1] "Hola"
## 
## $d
## [1] "XX"
  1. 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:
  1. x=(8,7,6,5)
  2. y = (3,3, 3, 3, 3, 3, 3, 3, 2, 2)
  3. z = (1, 1.75, 2.5, 3.25, 4)
# Definir vectores 
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)

# Generar una lista 
variables = list(x= x, y= y, z = z)

for (i in 1:length(variables)) {
  n <- names(variables)[i]
  media <- mean(variables[[i]])
  sdt <- sd(variables[[i]])
  mediana <- median(variables[[i]])
  moda <- n[which.max(table(n))]
  longitud <- length(variables[[i]])
  
  print("******************************")
  print(paste("Variable ------>", n))
  print(paste("Media:", media))
  print(paste("Desviacion estandar:", sdt))
  print(paste("Mediana:", mediana))
  print(paste("Moda:", moda))
  print(paste("Tamano:", longitud ))
  
  print("******************************")
}
## [1] "******************************"
## [1] "Variable ------> x"
## [1] "Media: 6.5"
## [1] "Desviacion estandar: 1.29099444873581"
## [1] "Mediana: 6.5"
## [1] "Moda: x"
## [1] "Tamano: 4"
## [1] "******************************"
## [1] "******************************"
## [1] "Variable ------> y"
## [1] "Media: 2.8"
## [1] "Desviacion estandar: 0.421637021355784"
## [1] "Mediana: 3"
## [1] "Moda: y"
## [1] "Tamano: 10"
## [1] "******************************"
## [1] "******************************"
## [1] "Variable ------> z"
## [1] "Media: 2.5"
## [1] "Desviacion estandar: 1.18585412256314"
## [1] "Mediana: 2.5"
## [1] "Moda: z"
## [1] "Tamano: 5"
## [1] "******************************"
  1. 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:
  1. x + x
  2. x + y.
  3. Responda ¿Qué ha hecho R?
# Definir los vectores
x <- c(1, 2, 3, 4, 5, 6)
y <- c(7, 8)
z <- c(9, 10, 11, 12)

# a. x + x
resultado_a <- x + x
print(resultado_a)
## [1]  2  4  6  8 10 12
# b. x + y
resultado_b <- x + y
print(resultado_b)
## [1]  8 10 10 12 12 14

Lo que ha hecho R es reciclar los valores del vector más corto para que coincida con la longitud del vector más largo.

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

[[1]] [1] “Hola” [[2]] [1] “Mundo”

# Definir string
cadena <- "Hola Mundo"

# Usar strsplit para dividir la cadena en subcadenas por espacio
resultado <- strsplit(cadena, " ")[[1]]

# Mostrar la salida con el formato deseado
for (i in 1:length(resultado)) {
  print(paste("[[", i, "]]", sep = ""))
  print(resultado[i])
}
## [1] "[[1]]"
## [1] "Hola"
## [1] "[[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. //

Cargar los datos

ruta <-  'C:/Users/halegre/Documents/Heberto/galileo/data.RData'
df <- load("data.RData")
View(df)

Al cargarlo notará que existe una única variable llamada info_estidiantes, para dicha variable responda la siguientes preguntas:

  1. ¿Qué tipo de dato es info_estudiantes?
# Seleccionar la variable
class(info_estudiantes)
## [1] "list"
  1. ¿Cuantos elementos tiene info_estudiantes?
# Determinar largo de la variable
length(info_estudiantes)
## [1] 3
  1. ¿Qué representa cada uno de los elementos de info_estudiantes?
names(info_estudiantes)
## [1] "carnet"   "promedio" "tipo"
  1. ¿Cuál es la media de los estudiantes ingresados en el año 2019?
round(mean(info_estudiantes$promedio[substr(info_estudiantes$carnet, 1, 2)==19]),1)
## [1] 70.9
  1. ¿Cuál es la suma de desviación estándar de los estudiantes que ingresaron en el año 2016 y 2018?
sd(info_estudiantes$promedio[substr(info_estudiantes$carnet, 1, 2) == 16]) + sd(info_estudiantes$promedio[substr(info_estudiantes$carnet, 1, 2) == 18])
## [1] 35.13241
  1. ¿Cuál es el mínimo de notas de aquellos estudiantes donde su carnet termina con los números 45 a 48
min(info_estudiantes$promedio[((substr(info_estudiantes$carnet, 7, 8) >= 45)&(substr(info_estudiantes$carnet, 7, 8) <= 48))])
## [1] 40
  1. ¿Cuál es la probabilidad de que un estudiante tipo A tenga una nota mayor a 85?
round(length(info_estudiantes$promedio[(info_estudiantes$tipo=='A')&(info_estudiantes$promedio>85)])/length(info_estudiantes$promedio[info_estudiantes$tipo=='A']),2)
## [1] 0.25
  1. ¿Cuál es la probabilidad de que un estudiante tipo C haya ingresado en el año 2017 o 2019?
round(length(info_estudiantes$carnet[(substr(info_estudiantes$carnet, 1, 2) == 17)|(substr(info_estudiantes$carnet, 1, 2) == 19)&(info_estudiantes$tipo=='C')])/length(info_estudiantes$carnet[(substr(info_estudiantes$carnet, 1, 2) == 17)|(substr(info_estudiantes$carnet, 1, 2) == 19)]),2)
## [1] 0.63