Ejercicios prácticos
🎯 Objetivo
Practicar los comandos básicos de R mediante ejercicios resueltos paso a paso.
Ejercicio 1: Variables y Operaciones Básicas
📌 Enunciado
Crea variables para almacenar datos personales de un estudiante y realiza operaciones básicas:
- Crea una variable con el nombre del estudiante
- Crea una variable con la edad
- Crea una variable con la altura en metros
- Calcula cuántos años tendrá en 5 años
- Calcula la altura en centímetros
- Escribe un mensaje mostrando toda la información
✅ Solución
Solución Ejercicio 1
# Variables básicas
nombre <- "Juan"
edad <- 20
altura <- 1.75
# Cálculos
edad_futura <- edad + 5
altura_cm <- altura * 100
# Mostrar resultados
print(nombre)
print(edad)
print(altura)
print(edad_futura) # Resultado: [1] 25
print(altura_cm) # Resultado: [1] 175
# Mensaje completo
paste("El estudiante", nombre, "tiene", edad, "años y mide", altura, "metros")
# Resultado: [1] "El estudiante Juan tiene 20 años y mide 1.75 metros"
Explicación:
- paste() combina texto y variables en una cadena
- Las operaciones edad + 5 y altura * 100 se realizan directamente
- print() muestra el resultado en consola
Ejercicio 2: Vectores y Estadísticas
📌 Enunciado
Un profesor tiene las notas de 6 estudiantes: 8.5, 7.2, 9.1, 8.9, 7.5, 8.3
- Crea un vector con las notas
- Calcula la media, mediana, desviación estándar y varianza
- Encuentra el valor máximo y mínimo
- Calcula cuántos puntos están por encima de 8.5
- Calcula el rango (diferencia entre máximo y mínimo)
✅ Solución
Solución Ejercicio 2
# Crear vector de notas
notas <- c(8.5, 7.2, 9.1, 8.9, 7.5, 8.3)
# Estadísticas
media <- mean(notas) # [1] 8.25
mediana <- median(notas) # [1] 8.4
desv_est <- sd(notas) # [1] 0.7371
varianza <- var(notas) # [1] 0.5433
# Mínimo y máximo
minimo <- min(notas) # [1] 7.2
maximo <- max(notas) # [1] 9.1
# Notas por encima de 8.5
notas_altas <- sum(notas > 8.5) # [1] 3 (8.9, 9.1, 8.5)
# Rango
rango <- max(notas) - min(notas) # [1] 1.9
# Mostrar todos los resultados
print(paste("Media:", media))
print(paste("Mediana:", mediana))
print(paste("Desviación estándar:", desv_est))
print(paste("Varianza:", varianza))
print(paste("Rango:", rango))
Explicación:
- notas > 8.5 devuelve un vector de TRUE/FALSE
- sum() cuenta los TRUE como 1 y los FALSE como 0
- sd() y var() son funciones estadísticas clave
✨ Comparación en vectores
Cuando escribes notas > 8.5, R compara cada elemento:
Ejercicio 3: Trabajar con Data Frames
📌 Enunciado
Tienes datos de una encuesta con 5 personas:
| Nombre | Edad | Ingresos (€) |
|---|---|---|
| Ana | 25 | 2000 |
| Bruno | 32 | 2500 |
| Carlos | 28 | 2300 |
| Diana | 35 | 3000 |
| Elena | 24 | 1800 |
- Crea un data frame con estos datos
- Accede a los ingresos de Bruno
- Calcula la edad promedio
- Calcula los ingresos totales
- Encuentra quién tiene más ingresos
- Crea una nueva columna con impuestos (20% de ingresos)
✅ Solución
Solución Ejercicio 3
# Crear el data frame
encuesta <- data.frame(
nombre = c("Ana", "Bruno", "Carlos", "Diana", "Elena"),
edad = c(25, 32, 28, 35, 24),
ingresos = c(2000, 2500, 2300, 3000, 1800)
)
# Ver el data frame
encuesta
# Acceder a los ingresos de Bruno (fila 2, columna 3)
bruno_ingresos <- encuesta[2, 3] # [1] 2500
# O usando el nombre de la columna
bruno_ingresos <- encuesta$ingresos[2] # [1] 2500
# Edad promedio
edad_prom <- mean(encuesta$edad) # [1] 28.8
# Ingresos totales
ingresos_totales <- sum(encuesta$ingresos) # [1] 11600
# Quién tiene más ingresos
max_ingresos <- max(encuesta$ingresos) # [1] 3000
persona_max <- encuesta$nombre[encuesta$ingresos == max_ingresos] # [1] "Diana"
# Crear nueva columna con impuestos (20%)
encuesta$impuestos <- encuesta$ingresos * 0.20
# Ver el data frame con la nueva columna
encuesta
Salida esperada:
💡 Adicionar columnas
Cuando haces encuesta$impuestos <- ..., R crea automáticamente una nueva columna si no existe.
Ejercicio 4: Filtrado de Datos
📌 Enunciado
Usando el data frame del Ejercicio 3 (encuesta):
- Filtra las personas mayores de 28 años
- Filtra las personas con ingresos superiores a 2200€
- Filtra personas que sean mayores de 25 años Y tengan ingresos > 2300€
- Cuenta cuántas personas cumplen la condición anterior
✅ Solución
Solución Ejercicio 4
# Usando el data frame del ejercicio anterior
encuesta <- data.frame(
nombre = c("Ana", "Bruno", "Carlos", "Diana", "Elena"),
edad = c(25, 32, 28, 35, 24),
ingresos = c(2000, 2500, 2300, 3000, 1800)
)
# 1. Personas mayores de 28 años
mayores_28 <- encuesta[encuesta$edad > 28, ]
mayores_28
# Resultado: Bruno (32), Diana (35)
# 2. Personas con ingresos > 2200€
altos_ingresos <- encuesta[encuesta$ingresos > 2200, ]
altos_ingresos
# Resultado: Bruno, Carlos, Diana
# 3. Mayores de 25 años Y ingresos > 2300€
criterios <- encuesta$edad > 25 & encuesta$ingresos > 2300
filtrado <- encuesta[criterios, ]
filtrado
# Resultado: Bruno (32, 2500), Diana (35, 3000)
# 4. Contar cuántas cumplen (edad > 25 & ingresos > 2300)
cantidad <- sum(encuesta$edad > 25 & encuesta$ingresos > 2300)
print(cantidad) # [1] 2
Explicación:
- & significa AND (ambas condiciones deben ser verdaderas)
- | significaría OR (al menos una condición verdadera)
- [fila, ] devuelve todas las columnas de las filas que cumplen la condición
Ejercicio 5: Función summary() y Exploración de Datos
📌 Enunciado
Crea un dataset con las calificaciones de 10 estudiantes en 3 asignaturas:
- Asignatura 1: 7.5, 8.2, 9.0, 7.1, 8.5, 6.9, 8.8, 7.3, 9.2, 8.1
- Asignatura 2: 8.0, 7.8, 8.9, 7.5, 8.2, 7.1, 9.1, 7.9, 9.0, 8.3
-
Asignatura 3: 6.8, 7.5, 8.5, 6.9, 7.8, 6.5, 8.7, 7.1, 8.8, 7.9
-
Crea un data frame
calificaciones - Calcula la media de cada asignatura
- Usa
summary()para obtener un resumen completo - Encuentra quién (fila) tiene la nota más baja en Asignatura 1
- Calcula el promedio de cada estudiante (media de sus 3 asignaturas)
✅ Solución
Solución Ejercicio 5
# Crear el data frame
calificaciones <- data.frame(
Asignatura1 = c(7.5, 8.2, 9.0, 7.1, 8.5, 6.9, 8.8, 7.3, 9.2, 8.1),
Asignatura2 = c(8.0, 7.8, 8.9, 7.5, 8.2, 7.1, 9.1, 7.9, 9.0, 8.3),
Asignatura3 = c(6.8, 7.5, 8.5, 6.9, 7.8, 6.5, 8.7, 7.1, 8.8, 7.9)
)
# Ver las primeras filas
head(calificaciones)
# 1. Media de cada asignatura
media_as1 <- mean(calificaciones$Asignatura1) # [1] 8.06
media_as2 <- mean(calificaciones$Asignatura2) # [1] 8.18
media_as3 <- mean(calificaciones$Asignatura3) # [1] 7.75
print(paste("Media Asignatura 1:", media_as1))
print(paste("Media Asignatura 2:", media_as2))
print(paste("Media Asignatura 3:", media_as3))
# 2. Resumen completo
summary(calificaciones)
# 3. Nota más baja en Asignatura 1
min_as1 <- min(calificaciones$Asignatura1) # [1] 6.9
estudiante_min <- which.min(calificaciones$Asignatura1) # [1] 6
print(paste("Nota más baja:", min_as1, "- Estudiante número:", estudiante_min))
# 4. Promedio de cada estudiante
calificaciones$promedio <- (calificaciones$Asignatura1 +
calificaciones$Asignatura2 +
calificaciones$Asignatura3) / 3
# O usando rowMeans (más elegante)
calificaciones$promedio <- rowMeans(calificaciones[, 1:3])
# Ver resultados
calificaciones
Salida de summary():
✨ Función which.min()
which.min() devuelve el índice (posición) del valor mínimo, no el valor mismo.
Ejercicio 6: Combinación de Funciones
📌 Enunciado
Tienes una lista de temperaturas diarias en grados Celsius durante una semana:
- Crea un vector con las temperaturas
- Calcula media, máximo, mínimo
- Convierte a Fahrenheit (F = C × 9/5 + 32)
- Calcula la desviación estándar de las temperaturas en Fahrenheit
- Crea un vector que indique cuándo la temperatura fue superior al promedio
✅ Solución
Solución Ejercicio 6
# Crear vector de temperaturas en Celsius
temp_c <- c(18.5, 19.2, 20.1, 19.8, 21.5, 22.0, 20.5)
# 1. Estadísticas en Celsius
media_c <- mean(temp_c) # [1] 20.23
max_c <- max(temp_c) # [1] 22
min_c <- min(temp_c) # [1] 18.5
print(paste("Media:", media_c, "°C"))
print(paste("Máximo:", max_c, "°C"))
print(paste("Mínimo:", min_c, "°C"))
# 2. Convertir a Fahrenheit
temp_f <- temp_c * 9/5 + 32
temp_f # [1] 65.30 66.56 68.18 67.64 70.70 71.60 68.90
# 3. Desviación estándar en Fahrenheit
desv_f <- sd(temp_f) # [1] 1.944
print(paste("Desviación estándar en Fahrenheit:", desv_f))
# 4. Temperaturas superiores al promedio
por_encima <- temp_c > media_c
por_encima # [1] FALSE FALSE FALSE FALSE TRUE TRUE TRUE
# Contar cuántas días superaron el promedio
dias_superior <- sum(por_encima) # [1] 3
print(paste("Días con temperatura superior al promedio:", dias_superior))
# Crear un resumen completo
resumen <- data.frame(
dia = 1:7,
temp_c = temp_c,
temp_f = round(temp_f, 2),
superior_promedio = por_encima
)
resumen
Salida esperada:
💡 round()
round(temp_f, 2) redondea a 2 decimales. Es útil para presentar resultados limpios.
💡 Consejos Finales
- Practica en RStudio: Copia el código en el editor y ejecuta línea por línea
- Experimenta: Cambia los datos y ve qué sucede
- Usa la ayuda: Escribe
?meanen la consola para ver la documentación de una función - Combina funciones: Puedes anidar funciones, p.ej.
mean(c(1, 2, 3, 4)) - Comenta tu código:
# comentarioes tu amigo para recordar qué haces
📚 Enlaces relacionados
- Anterior: Comandos Básicos
- Complementario: Comandos Avanzados