Las estructuras de datos son fundamentales en R. Permiten almacenar, organizar, transformar y analizar información. En este documento se estudian tres estructuras esenciales: matrices, listas y arrays.
El documento está diseñado como una guía práctica para RStudio, con teoría, ejemplos desarrollados, interpretación y ejercicios.
Comprender y aplicar matrices, listas y arrays en RStudio para resolver problemas de análisis de datos en distintos contextos.
Una estructura de datos es una forma organizada de almacenar información dentro de un lenguaje de programación.
En R se utilizan con frecuencia:
| Estructura | Tipo de datos | Dimensión | Característica principal |
|---|---|---|---|
| Vector | Homogéneo | 1 | Una sola secuencia de datos |
| Matriz | Homogéneo | 2 | Filas y columnas |
| Array | Homogéneo | 3 o más | Datos multidimensionales |
| Lista | Heterogéneo | Variable | Puede almacenar diferentes objetos |
| Data frame | Mixto por columnas | 2 | Tabla de datos |
edades <- c(18, 20, 25, 30)
edades
## [1] 18 20 25 30
A <- matrix(c(1, 2, 3, 4), nrow = 2)
A
## [,1] [,2]
## [1,] 1 3
## [2,] 2 4
persona <- list(
nombre = "Ana",
edad = 25,
carrera = "Estadística"
)
persona
## $nombre
## [1] "Ana"
##
## $edad
## [1] 25
##
## $carrera
## [1] "Estadística"
B <- array(1:12, dim = c(2, 3, 2))
B
## , , 1
##
## [,1] [,2] [,3]
## [1,] 1 3 5
## [2,] 2 4 6
##
## , , 2
##
## [,1] [,2] [,3]
## [1,] 7 9 11
## [2,] 8 10 12
Una matriz es una estructura bidimensional compuesta por filas y columnas. Todos sus elementos deben ser del mismo tipo.
Matemáticamente, una matriz se representa como:
\[ A = \begin{pmatrix} a_{11} & a_{12} & a_{13} \\ a_{21} & a_{22} & a_{23} \end{pmatrix} \]
Esta matriz tiene 2 filas y 3 columnas.
M <- matrix(
c(1, 2, 3, 4, 5, 6),
nrow = 2,
ncol = 3
)
M
## [,1] [,2] [,3]
## [1,] 1 3 5
## [2,] 2 4 6
M_filas <- matrix(
c(1, 2, 3, 4, 5, 6),
nrow = 2,
byrow = TRUE
)
M_filas
## [,1] [,2] [,3]
## [1,] 1 2 3
## [2,] 4 5 6
nrow(M_filas)
## [1] 2
ncol(M_filas)
## [1] 3
dim(M_filas)
## [1] 2 3
A <- matrix(c(1, 2, 3, 4), nrow = 2, byrow = TRUE)
B <- matrix(c(5, 6, 7, 8), nrow = 2, byrow = TRUE)
A + B
## [,1] [,2]
## [1,] 6 8
## [2,] 10 12
A - B
## [,1] [,2]
## [1,] -4 -4
## [2,] -4 -4
A * B
## [,1] [,2]
## [1,] 5 12
## [2,] 21 32
A %*% B
## [,1] [,2]
## [1,] 19 22
## [2,] 43 50
t(A)
## [,1] [,2]
## [1,] 1 3
## [2,] 2 4
det(A)
## [1] -2
solve(A)
## [,1] [,2]
## [1,] -2.0 1.0
## [2,] 1.5 -0.5
Contexto: una empresa registra las ventas de dos sucursales para tres productos.
ventas <- matrix(
c(120, 150, 180,
200, 220, 250),
nrow = 2,
byrow = TRUE
)
rownames(ventas) <- c("Sucursal_A", "Sucursal_B")
colnames(ventas) <- c("Producto_1", "Producto_2", "Producto_3")
ventas
## Producto_1 Producto_2 Producto_3
## Sucursal_A 120 150 180
## Sucursal_B 200 220 250
rowSums(ventas)
## Sucursal_A Sucursal_B
## 450 670
colSums(ventas)
## Producto_1 Producto_2 Producto_3
## 320 370 430
Interpretación: rowSums() calcula el total vendido por
sucursal y colSums() calcula el total vendido por
producto.
notas <- matrix(
c(4.2, 3.8, 4.5,
3.5, 4.0, 4.1,
4.8, 4.7, 5.0),
nrow = 3,
byrow = TRUE
)
rownames(notas) <- c("Ana", "Luis", "Carlos")
colnames(notas) <- c("Parcial_1", "Parcial_2", "Parcial_3")
notas
## Parcial_1 Parcial_2 Parcial_3
## Ana 4.2 3.8 4.5
## Luis 3.5 4.0 4.1
## Carlos 4.8 4.7 5.0
rowMeans(notas)
## Ana Luis Carlos
## 4.166667 3.866667 4.833333
colMeans(notas)
## Parcial_1 Parcial_2 Parcial_3
## 4.166667 4.166667 4.533333
gastos <- matrix(
c(800, 600, 400,
900, 700, 500,
750, 650, 450),
nrow = 3,
byrow = TRUE
)
rownames(gastos) <- c("Enero", "Febrero", "Marzo")
colnames(gastos) <- c("Arriendo", "Comida", "Transporte")
gastos
## Arriendo Comida Transporte
## Enero 800 600 400
## Febrero 900 700 500
## Marzo 750 650 450
rowSums(gastos)
## Enero Febrero Marzo
## 1800 2100 1850
colSums(gastos)
## Arriendo Comida Transporte
## 2450 1950 1350
produccion_agricola <- matrix(
c(30, 40, 35,
50, 45, 55,
20, 25, 30),
nrow = 3,
byrow = TRUE
)
rownames(produccion_agricola) <- c("Finca_1", "Finca_2", "Finca_3")
colnames(produccion_agricola) <- c("Maiz", "Cafe", "Arroz")
produccion_agricola
## Maiz Cafe Arroz
## Finca_1 30 40 35
## Finca_2 50 45 55
## Finca_3 20 25 30
colSums(produccion_agricola)
## Maiz Cafe Arroz
## 100 110 120
pacientes <- matrix(
c(50, 30, 20,
60, 35, 25,
45, 40, 30),
nrow = 3,
byrow = TRUE
)
rownames(pacientes) <- c("Hospital_A", "Hospital_B", "Hospital_C")
colnames(pacientes) <- c("Urgencias", "Consulta", "Cirugia")
pacientes
## Urgencias Consulta Cirugia
## Hospital_A 50 30 20
## Hospital_B 60 35 25
## Hospital_C 45 40 30
rowSums(pacientes)
## Hospital_A Hospital_B Hospital_C
## 100 120 115
temperatura <- matrix(
c(18, 20, 22,
19, 21, 23,
17, 20, 21,
16, 19, 20),
nrow = 4,
byrow = TRUE
)
rownames(temperatura) <- c("Lunes", "Martes", "Miercoles", "Jueves")
colnames(temperatura) <- c("Manana", "Tarde", "Noche")
temperatura
## Manana Tarde Noche
## Lunes 18 20 22
## Martes 19 21 23
## Miercoles 17 20 21
## Jueves 16 19 20
rowMeans(temperatura)
## Lunes Martes Miercoles Jueves
## 20.00000 21.00000 19.33333 18.33333
inventario_matriz <- matrix(
c(15, 20, 10,
30, 25, 18,
12, 17, 22),
nrow = 3,
byrow = TRUE
)
rownames(inventario_matriz) <- c("Bodega_1", "Bodega_2", "Bodega_3")
colnames(inventario_matriz) <- c("Computadores", "Impresoras", "Tablets")
inventario_matriz
## Computadores Impresoras Tablets
## Bodega_1 15 20 10
## Bodega_2 30 25 18
## Bodega_3 12 17 22
colSums(inventario_matriz)
## Computadores Impresoras Tablets
## 57 62 50
docentes <- matrix(
c(4.5, 4.8, 4.7,
4.2, 4.0, 4.3,
4.9, 4.8, 5.0),
nrow = 3,
byrow = TRUE
)
rownames(docentes) <- c("Profesor_A", "Profesor_B", "Profesor_C")
colnames(docentes) <- c("Pedagogia", "Dominio", "Puntualidad")
docentes
## Pedagogia Dominio Puntualidad
## Profesor_A 4.5 4.8 4.7
## Profesor_B 4.2 4.0 4.3
## Profesor_C 4.9 4.8 5.0
rowMeans(docentes)
## Profesor_A Profesor_B Profesor_C
## 4.666667 4.166667 4.900000
accidentes <- matrix(
c(12, 8, 15,
20, 10, 18,
5, 4, 6),
nrow = 3,
byrow = TRUE
)
rownames(accidentes) <- c("Bogota", "Medellin", "Cali")
colnames(accidentes) <- c("Carro", "Moto", "Bus")
accidentes
## Carro Moto Bus
## Bogota 12 8 15
## Medellin 20 10 18
## Cali 5 4 6
colSums(accidentes)
## Carro Moto Bus
## 37 22 39
vehiculos <- matrix(
c(15, 10, 8,
20, 12, 5,
18, 9, 6),
nrow = 3,
byrow = TRUE
)
rownames(vehiculos) <- c("Toyota", "Mazda", "Renault")
colnames(vehiculos) <- c("Enero", "Febrero", "Marzo")
vehiculos
## Enero Febrero Marzo
## Toyota 15 10 8
## Mazda 20 12 5
## Renault 18 9 6
rowSums(vehiculos)
## Toyota Mazda Renault
## 33 37 33
produccion_industrial <- matrix(
c(500, 450, 600,
700, 650, 750,
400, 420, 390),
nrow = 3,
byrow = TRUE
)
rownames(produccion_industrial) <- c("Planta_A", "Planta_B", "Planta_C")
colnames(produccion_industrial) <- c("Turno_1", "Turno_2", "Turno_3")
produccion_industrial
## Turno_1 Turno_2 Turno_3
## Planta_A 500 450 600
## Planta_B 700 650 750
## Planta_C 400 420 390
apply(produccion_industrial, 1, max)
## Planta_A Planta_B Planta_C
## 600 750 420
rendimiento <- matrix(
c(85, 90, 88,
78, 82, 80,
95, 96, 97),
nrow = 3,
byrow = TRUE
)
rownames(rendimiento) <- c("Juan", "Ana", "Luis")
colnames(rendimiento) <- c("Matematicas", "Estadistica", "Programacion")
rendimiento
## Matematicas Estadistica Programacion
## Juan 85 90 88
## Ana 78 82 80
## Luis 95 96 97
rowMeans(rendimiento)
## Juan Ana Luis
## 87.66667 80.00000 96.00000
energia <- matrix(
c(120, 135, 128,
200, 210, 205,
90, 100, 95),
nrow = 3,
byrow = TRUE
)
rownames(energia) <- c("Casa_1", "Casa_2", "Casa_3")
colnames(energia) <- c("Semana_1", "Semana_2", "Semana_3")
energia
## Semana_1 Semana_2 Semana_3
## Casa_1 120 135 128
## Casa_2 200 210 205
## Casa_3 90 100 95
rowMeans(energia)
## Casa_1 Casa_2 Casa_3
## 127.6667 205.0000 95.0000
presupuesto <- matrix(
c(300, 250, 200,
400, 380, 350,
150, 170, 160),
nrow = 3,
byrow = TRUE
)
rownames(presupuesto) <- c("Educacion", "Salud", "Deporte")
colnames(presupuesto) <- c("2024", "2025", "2026")
presupuesto
## 2024 2025 2026
## Educacion 300 250 200
## Salud 400 380 350
## Deporte 150 170 160
rowSums(presupuesto)
## Educacion Salud Deporte
## 750 1130 480
indicadores <- matrix(
c(0.12, 0.15, 0.18,
0.08, 0.09, 0.10,
0.20, 0.22, 0.25),
nrow = 3,
byrow = TRUE
)
rownames(indicadores) <- c("Rentabilidad", "Liquidez", "Endeudamiento")
colnames(indicadores) <- c("2023", "2024", "2025")
indicadores
## 2023 2024 2025
## Rentabilidad 0.12 0.15 0.18
## Liquidez 0.08 0.09 0.10
## Endeudamiento 0.20 0.22 0.25
rowMeans(indicadores)
## Rentabilidad Liquidez Endeudamiento
## 0.1500000 0.0900000 0.2233333
Una lista es una estructura flexible que puede almacenar objetos de diferentes tipos: números, texto, vectores, matrices, arrays, data frames, modelos y otras listas.
lista_basica <- list(
nombre = "Carlos",
edad = 28,
notas = c(4.0, 4.5, 5.0),
aprobado = TRUE
)
lista_basica
## $nombre
## [1] "Carlos"
##
## $edad
## [1] 28
##
## $notas
## [1] 4.0 4.5 5.0
##
## $aprobado
## [1] TRUE
lista_basica$nombre
## [1] "Carlos"
lista_basica[[1]]
## [1] "Carlos"
lista_basica[1]
## $nombre
## [1] "Carlos"
[ ] y [[ ]]class(lista_basica[1])
## [1] "list"
class(lista_basica[[1]])
## [1] "character"
estudiante <- list(
nombre = "Ana",
edad = 21,
carrera = "Estadística"
)
estudiante
## $nombre
## [1] "Ana"
##
## $edad
## [1] 21
##
## $carrera
## [1] "Estadística"
estudiante$nombre
## [1] "Ana"
empleado <- list(
nombre = "Carlos",
salario = 3500000,
antiguedad = 5
)
empleado
## $nombre
## [1] "Carlos"
##
## $salario
## [1] 3500000
##
## $antiguedad
## [1] 5
empleado$salario
## [1] 3500000
notas_lista <- list(
parcial1 = 4.2,
parcial2 = 3.8,
parcial3 = 4.5
)
notas_lista
## $parcial1
## [1] 4.2
##
## $parcial2
## [1] 3.8
##
## $parcial3
## [1] 4.5
mean(unlist(notas_lista))
## [1] 4.166667
cliente <- list(
nombre = "Laura",
compras = c(250, 180, 320)
)
cliente
## $nombre
## [1] "Laura"
##
## $compras
## [1] 250 180 320
sum(cliente$compras)
## [1] 750
mean(cliente$compras)
## [1] 250
universidad_simple <- list(
facultad = "Ingeniería",
estudiantes = 1200,
profesores = 85
)
universidad_simple
## $facultad
## [1] "Ingeniería"
##
## $estudiantes
## [1] 1200
##
## $profesores
## [1] 85
universidad_simple$estudiantes / universidad_simple$profesores
## [1] 14.11765
hospital_simple <- list(
pacientes = 250,
medicos = 40,
camas = 180
)
hospital_simple
## $pacientes
## [1] 250
##
## $medicos
## [1] 40
##
## $camas
## [1] 180
hospital_simple$pacientes / hospital_simple$camas
## [1] 1.388889
empresa_ventas <- list(
nombre = "Comercial Andes",
ventas = matrix(
c(120, 150, 180,
200, 230, 260),
nrow = 2,
byrow = TRUE
)
)
colnames(empresa_ventas$ventas) <- c("Enero", "Febrero", "Marzo")
rownames(empresa_ventas$ventas) <- c("Producto_A", "Producto_B")
empresa_ventas$ventas
## Enero Febrero Marzo
## Producto_A 120 150 180
## Producto_B 200 230 260
rowSums(empresa_ventas$ventas)
## Producto_A Producto_B
## 450 690
curso <- list(
asignatura = "Estadística",
notas = matrix(
c(4.0, 3.8, 4.5,
3.5, 4.2, 4.0),
nrow = 2,
byrow = TRUE
)
)
rownames(curso$notas) <- c("Estudiante_1", "Estudiante_2")
colnames(curso$notas) <- c("Quiz", "Parcial", "Final")
curso$notas
## Quiz Parcial Final
## Estudiante_1 4.0 3.8 4.5
## Estudiante_2 3.5 4.2 4.0
rowMeans(curso$notas)
## Estudiante_1 Estudiante_2
## 4.1 3.9
finanzas <- list(
empresa = "Inversiones del Norte",
ingresos = matrix(
c(5000, 6200, 7100,
3000, 3500, 3900),
nrow = 2,
byrow = TRUE
)
)
rownames(finanzas$ingresos) <- c("Ingresos", "Gastos")
colnames(finanzas$ingresos) <- c("2023", "2024", "2025")
finanzas$ingresos
## 2023 2024 2025
## Ingresos 5000 6200 7100
## Gastos 3000 3500 3900
finanzas$ingresos["Ingresos", ] - finanzas$ingresos["Gastos", ]
## 2023 2024 2025
## 2000 2700 3200
clientes <- list(
segmento = "Clientes premium",
datos = matrix(
c(25, 3000,
30, 4500,
40, 6000),
nrow = 3,
byrow = TRUE
)
)
colnames(clientes$datos) <- c("Edad", "Ingreso")
rownames(clientes$datos) <- c("Cliente_1", "Cliente_2", "Cliente_3")
clientes$datos
## Edad Ingreso
## Cliente_1 25 3000
## Cliente_2 30 4500
## Cliente_3 40 6000
colMeans(clientes$datos)
## Edad Ingreso
## 31.66667 4500.00000
equipo <- list(
nombre = "Tigres",
rendimiento = matrix(
c(2, 1, 3,
1, 0, 2,
3, 2, 4),
nrow = 3,
byrow = TRUE
)
)
rownames(equipo$rendimiento) <- c("Jugador_1", "Jugador_2", "Jugador_3")
colnames(equipo$rendimiento) <- c("Goles", "Asistencias", "Partidos")
equipo$rendimiento
## Goles Asistencias Partidos
## Jugador_1 2 1 3
## Jugador_2 1 0 2
## Jugador_3 3 2 4
rowSums(equipo$rendimiento)
## Jugador_1 Jugador_2 Jugador_3
## 6 3 9
encuesta <- list(
tema = "Satisfacción del servicio",
respuestas = matrix(
c(5, 4, 3,
4, 5, 4,
3, 4, 5),
nrow = 3,
byrow = TRUE
)
)
colnames(encuesta$respuestas) <- c("Calidad", "Rapidez", "Atencion")
rownames(encuesta$respuestas) <- c("Persona_1", "Persona_2", "Persona_3")
encuesta$respuestas
## Calidad Rapidez Atencion
## Persona_1 5 4 3
## Persona_2 4 5 4
## Persona_3 3 4 5
colMeans(encuesta$respuestas)
## Calidad Rapidez Atencion
## 4.000000 4.333333 4.000000
empresa_salarios <- list(
nombre = "DataCorp",
salarios = matrix(
c(3000, 3500,
4500, 5000,
6000, 6500),
nrow = 3,
byrow = TRUE
)
)
colnames(empresa_salarios$salarios) <- c("Salario_2024", "Salario_2025")
rownames(empresa_salarios$salarios) <- c("Empleado_1", "Empleado_2", "Empleado_3")
empresa_salarios$salarios
## Salario_2024 Salario_2025
## Empleado_1 3000 3500
## Empleado_2 4500 5000
## Empleado_3 6000 6500
rowMeans(empresa_salarios$salarios)
## Empleado_1 Empleado_2 Empleado_3
## 3250 4750 6250
hospital_pacientes <- list(
area = "Cardiologia",
pacientes = matrix(
c(70, 120,
65, 110,
80, 140),
nrow = 3,
byrow = TRUE
)
)
colnames(hospital_pacientes$pacientes) <- c("Peso", "Presion")
rownames(hospital_pacientes$pacientes) <- c("Paciente_1", "Paciente_2", "Paciente_3")
hospital_pacientes$pacientes
## Peso Presion
## Paciente_1 70 120
## Paciente_2 65 110
## Paciente_3 80 140
colMeans(hospital_pacientes$pacientes)
## Peso Presion
## 71.66667 123.33333
investigacion <- list(
proyecto = "Modelo de IA",
resultados = matrix(
c(0.85, 0.88,
0.92, 0.91,
0.89, 0.93),
nrow = 3,
byrow = TRUE
)
)
colnames(investigacion$resultados) <- c("Precision", "Recall")
rownames(investigacion$resultados) <- c("Modelo_1", "Modelo_2", "Modelo_3")
investigacion$resultados
## Precision Recall
## Modelo_1 0.85 0.88
## Modelo_2 0.92 0.91
## Modelo_3 0.89 0.93
apply(investigacion$resultados, 2, mean)
## Precision Recall
## 0.8866667 0.9066667
Un array es una estructura multidimensional. A diferencia de una matriz, que tiene filas y columnas, un array puede tener tres o más dimensiones.
Un array puede representarse como:
\[ Array = Filas \times Columnas \times Capas \]
array_basico <- array(
1:24,
dim = c(3, 4, 2)
)
array_basico
## , , 1
##
## [,1] [,2] [,3] [,4]
## [1,] 1 4 7 10
## [2,] 2 5 8 11
## [3,] 3 6 9 12
##
## , , 2
##
## [,1] [,2] [,3] [,4]
## [1,] 13 16 19 22
## [2,] 14 17 20 23
## [3,] 15 18 21 24
array_basico[2, 3, 1]
## [1] 8
array_basico[, , 1]
## [,1] [,2] [,3] [,4]
## [1,] 1 4 7 10
## [2,] 2 5 8 11
## [3,] 3 6 9 12
array_basico[, , 2]
## [,1] [,2] [,3] [,4]
## [1,] 13 16 19 22
## [2,] 14 17 20 23
## [3,] 15 18 21 24
ventas_array <- array(
c(100, 120, 140,
160, 180, 200,
110, 130, 150,
170, 190, 210),
dim = c(2, 3, 2)
)
dimnames(ventas_array) <- list(
Tienda = c("Tienda_A", "Tienda_B"),
Producto = c("Producto_1", "Producto_2", "Producto_3"),
Año = c("2024", "2025")
)
ventas_array
## , , Año = 2024
##
## Producto
## Tienda Producto_1 Producto_2 Producto_3
## Tienda_A 100 140 180
## Tienda_B 120 160 200
##
## , , Año = 2025
##
## Producto
## Tienda Producto_1 Producto_2 Producto_3
## Tienda_A 110 150 190
## Tienda_B 130 170 210
ventas_array[, , "2024"]
## Producto
## Tienda Producto_1 Producto_2 Producto_3
## Tienda_A 100 140 180
## Tienda_B 120 160 200
ventas_array[, , "2025"]
## Producto
## Tienda Producto_1 Producto_2 Producto_3
## Tienda_A 110 150 190
## Tienda_B 130 170 210
clima <- array(
c(18, 20,
21, 23,
17, 19,
20, 22,
16, 18,
19, 21),
dim = c(2, 3, 2)
)
dimnames(clima) <- list(
Ciudad = c("Bogota", "Medellin"),
Dia = c("Lunes", "Martes", "Miercoles"),
Jornada = c("Manana", "Tarde")
)
clima
## , , Jornada = Manana
##
## Dia
## Ciudad Lunes Martes Miercoles
## Bogota 18 21 17
## Medellin 20 23 19
##
## , , Jornada = Tarde
##
## Dia
## Ciudad Lunes Martes Miercoles
## Bogota 20 16 19
## Medellin 22 18 21
clima[, , "Manana"]
## Dia
## Ciudad Lunes Martes Miercoles
## Bogota 18 21 17
## Medellin 20 23 19
hospitales <- array(
1:18,
dim = c(3, 3, 2)
)
dimnames(hospitales) <- list(
Hospital = c("Hospital_A", "Hospital_B", "Hospital_C"),
Servicio = c("Urgencias", "Consulta", "Cirugia"),
Mes = c("Enero", "Febrero")
)
hospitales
## , , Mes = Enero
##
## Servicio
## Hospital Urgencias Consulta Cirugia
## Hospital_A 1 4 7
## Hospital_B 2 5 8
## Hospital_C 3 6 9
##
## , , Mes = Febrero
##
## Servicio
## Hospital Urgencias Consulta Cirugia
## Hospital_A 10 13 16
## Hospital_B 11 14 17
## Hospital_C 12 15 18
hospitales[, , "Enero"]
## Servicio
## Hospital Urgencias Consulta Cirugia
## Hospital_A 1 4 7
## Hospital_B 2 5 8
## Hospital_C 3 6 9
calificaciones <- array(
c(4.0, 3.5, 4.8,
3.8, 4.2, 4.7,
4.5, 4.0, 5.0,
4.1, 3.9, 4.6),
dim = c(3, 2, 2)
)
dimnames(calificaciones) <- list(
Estudiante = c("Ana", "Luis", "Carlos"),
Materia = c("Matematicas", "Estadistica"),
Corte = c("Corte_1", "Corte_2")
)
calificaciones
## , , Corte = Corte_1
##
## Materia
## Estudiante Matematicas Estadistica
## Ana 4.0 3.8
## Luis 3.5 4.2
## Carlos 4.8 4.7
##
## , , Corte = Corte_2
##
## Materia
## Estudiante Matematicas Estadistica
## Ana 4.5 4.1
## Luis 4.0 3.9
## Carlos 5.0 4.6
calificaciones[, , "Corte_1"]
## Materia
## Estudiante Matematicas Estadistica
## Ana 4.0 3.8
## Luis 3.5 4.2
## Carlos 4.8 4.7
produccion_array <- array(
c(20, 30,
25, 35,
40, 50,
45, 55,
30, 35,
38, 42),
dim = c(2, 3, 2)
)
dimnames(produccion_array) <- list(
Finca = c("Finca_1", "Finca_2"),
Cultivo = c("Cafe", "Maiz", "Arroz"),
Semestre = c("Semestre_1", "Semestre_2")
)
produccion_array
## , , Semestre = Semestre_1
##
## Cultivo
## Finca Cafe Maiz Arroz
## Finca_1 20 25 40
## Finca_2 30 35 50
##
## , , Semestre = Semestre_2
##
## Cultivo
## Finca Cafe Maiz Arroz
## Finca_1 45 30 38
## Finca_2 55 35 42
produccion_array[, , "Semestre_2"]
## Cultivo
## Finca Cafe Maiz Arroz
## Finca_1 45 30 38
## Finca_2 55 35 42
set.seed(123)
imagen <- array(
runif(4 * 4 * 3),
dim = c(4, 4, 3)
)
dimnames(imagen) <- list(
Fila = paste0("Fila_", 1:4),
Columna = paste0("Col_", 1:4),
Canal = c("Rojo", "Verde", "Azul")
)
imagen
## , , Canal = Rojo
##
## Columna
## Fila Col_1 Col_2 Col_3 Col_4
## Fila_1 0.2875775 0.9404673 0.5514350 0.6775706
## Fila_2 0.7883051 0.0455565 0.4566147 0.5726334
## Fila_3 0.4089769 0.5281055 0.9568333 0.1029247
## Fila_4 0.8830174 0.8924190 0.4533342 0.8998250
##
## , , Canal = Verde
##
## Columna
## Fila Col_1 Col_2 Col_3 Col_4
## Fila_1 0.24608773 0.8895393 0.6557058 0.2891597
## Fila_2 0.04205953 0.6928034 0.7085305 0.1471136
## Fila_3 0.32792072 0.6405068 0.5440660 0.9630242
## Fila_4 0.95450365 0.9942698 0.5941420 0.9022990
##
## , , Canal = Azul
##
## Columna
## Fila Col_1 Col_2 Col_3 Col_4
## Fila_1 0.69070528 0.7584595 0.1428000 0.1524447
## Fila_2 0.79546742 0.2164079 0.4145463 0.1388061
## Fila_3 0.02461368 0.3181810 0.4137243 0.2330341
## Fila_4 0.47779597 0.2316258 0.3688455 0.4659625
imagen[, , "Rojo"]
## Columna
## Fila Col_1 Col_2 Col_3 Col_4
## Fila_1 0.2875775 0.9404673 0.5514350 0.6775706
## Fila_2 0.7883051 0.0455565 0.4566147 0.5726334
## Fila_3 0.4089769 0.5281055 0.9568333 0.1029247
## Fila_4 0.8830174 0.8924190 0.4533342 0.8998250
inventario_array <- array(
c(10, 15,
20, 25,
30, 35,
12, 18,
22, 28,
32, 38),
dim = c(2, 3, 2)
)
dimnames(inventario_array) <- list(
Bodega = c("Bodega_A", "Bodega_B"),
Producto = c("Laptop", "Tablet", "Monitor"),
Trimestre = c("T1", "T2")
)
inventario_array
## , , Trimestre = T1
##
## Producto
## Bodega Laptop Tablet Monitor
## Bodega_A 10 20 30
## Bodega_B 15 25 35
##
## , , Trimestre = T2
##
## Producto
## Bodega Laptop Tablet Monitor
## Bodega_A 12 22 32
## Bodega_B 18 28 38
inventario_array[, , "T1"]
## Producto
## Bodega Laptop Tablet Monitor
## Bodega_A 10 20 30
## Bodega_B 15 25 35
inventario_array[, , "T2"]
## Producto
## Bodega Laptop Tablet Monitor
## Bodega_A 12 22 32
## Bodega_B 18 28 38
set.seed(456)
sensores <- array(
round(runif(24, 0, 100), 2),
dim = c(4, 3, 2)
)
dimnames(sensores) <- list(
Sensor = c("S1", "S2", "S3", "S4"),
Variable = c("Temperatura", "Humedad", "Presion"),
Tiempo = c("Hora_1", "Hora_2")
)
sensores
## , , Tiempo = Hora_1
##
## Variable
## Sensor Temperatura Humedad Presion
## S1 8.96 78.84 23.75
## S2 21.05 33.20 38.52
## S3 73.30 8.24 37.29
## S4 85.21 28.55 21.79
##
## , , Tiempo = Hora_2
##
## Variable
## Sensor Temperatura Humedad Presion
## S1 75.51 84.31 17.99
## S2 82.17 45.32 72.17
## S3 59.89 71.68 90.51
## S4 65.10 29.12 44.58
set.seed(789)
biomedico <- array(
round(runif(18, 50, 150), 2),
dim = c(3, 3, 2)
)
dimnames(biomedico) <- list(
Paciente = c("Paciente_1", "Paciente_2", "Paciente_3"),
Variable = c("Glucosa", "Presion", "Frecuencia"),
Momento = c("Antes", "Despues")
)
biomedico
## , , Momento = Antes
##
## Variable
## Paciente Glucosa Presion Frecuencia
## Paciente_1 119.99 109.16 107.27
## Paciente_2 59.35 99.21 66.58
## Paciente_3 51.19 52.02 85.89
##
## , , Momento = Despues
##
## Variable
## Paciente Glucosa Presion Frecuencia
## Paciente_1 84.63 75.26 51.84
## Paciente_2 81.40 96.59 65.60
## Paciente_3 100.75 93.07 114.52
biomedico[, , "Antes"]
## Variable
## Paciente Glucosa Presion Frecuencia
## Paciente_1 119.99 109.16 107.27
## Paciente_2 59.35 99.21 66.58
## Paciente_3 51.19 52.02 85.89
set.seed(101)
ventas_trimestre <- array(
sample(100:500, 24, replace = TRUE),
dim = c(4, 3, 2)
)
dimnames(ventas_trimestre) <- list(
Sucursal = c("Norte", "Sur", "Centro", "Occidente"),
Producto = c("A", "B", "C"),
Trimestre = c("T1", "T2")
)
ventas_trimestre
## , , Trimestre = T1
##
## Producto
## Sucursal A B C
## Norte 428 450 454
## Sur 412 416 227
## Centro 194 414 230
## Occidente 308 345 387
##
## , , Trimestre = T2
##
## Producto
## Sucursal A B C
## Norte 108 343 158
## Sur 451 258 113
## Centro 454 415 303
## Occidente 453 194 196
apply(ventas_trimestre, c(2, 3), sum)
## Trimestre
## Producto T1 T2
## A 1342 1466
## B 1625 1210
## C 1298 770
En proyectos reales se pueden combinar estructuras. Por ejemplo, una lista puede almacenar una matriz de empleados y un array de ventas.
sistema_empresa <- list(
nombre = "Empresa Global",
empleados = matrix(
c(30, 3500,
25, 2800,
40, 5000),
nrow = 3,
byrow = TRUE
),
ventas = array(
c(100, 120,
140, 160,
180, 200,
110, 130,
150, 170,
190, 210),
dim = c(2, 3, 2)
)
)
colnames(sistema_empresa$empleados) <- c("Edad", "Salario")
rownames(sistema_empresa$empleados) <- c("Empleado_1", "Empleado_2", "Empleado_3")
dimnames(sistema_empresa$ventas) <- list(
Sucursal = c("Sucursal_A", "Sucursal_B"),
Producto = c("Producto_1", "Producto_2", "Producto_3"),
Año = c("2024", "2025")
)
sistema_empresa$empleados
## Edad Salario
## Empleado_1 30 3500
## Empleado_2 25 2800
## Empleado_3 40 5000
sistema_empresa$ventas
## , , Año = 2024
##
## Producto
## Sucursal Producto_1 Producto_2 Producto_3
## Sucursal_A 100 140 180
## Sucursal_B 120 160 200
##
## , , Año = 2025
##
## Producto
## Sucursal Producto_1 Producto_2 Producto_3
## Sucursal_A 110 150 190
## Sucursal_B 130 170 210
colMeans(sistema_empresa$empleados)
## Edad Salario
## 31.66667 3766.66667
apply(sistema_empresa$ventas, c(2, 3), sum)
## Año
## Producto 2024 2025
## Producto_1 220 240
## Producto_2 300 320
## Producto_3 380 400
sistema_universidad <- list(
programa = "Estadística",
estudiantes = matrix(
c(20, 4.2,
22, 3.8,
21, 4.5),
nrow = 3,
byrow = TRUE
),
rendimiento = array(
c(4.0, 3.8, 4.5,
4.2, 4.1, 4.6,
3.9, 4.0, 4.4,
4.3, 4.2, 4.7),
dim = c(3, 2, 2)
)
)
colnames(sistema_universidad$estudiantes) <- c("Edad", "Promedio")
rownames(sistema_universidad$estudiantes) <- c("Ana", "Luis", "Carlos")
dimnames(sistema_universidad$rendimiento) <- list(
Estudiante = c("Ana", "Luis", "Carlos"),
Materia = c("Matematicas", "Estadistica"),
Semestre = c("Semestre_1", "Semestre_2")
)
sistema_universidad$estudiantes
## Edad Promedio
## Ana 20 4.2
## Luis 22 3.8
## Carlos 21 4.5
sistema_universidad$rendimiento
## , , Semestre = Semestre_1
##
## Materia
## Estudiante Matematicas Estadistica
## Ana 4.0 4.2
## Luis 3.8 4.1
## Carlos 4.5 4.6
##
## , , Semestre = Semestre_2
##
## Materia
## Estudiante Matematicas Estadistica
## Ana 3.9 4.3
## Luis 4.0 4.2
## Carlos 4.4 4.7
Las matrices se utilizan en:
Las listas se utilizan en:
Ejemplo con modelo lineal:
modelo <- lm(mpg ~ wt, data = mtcars)
class(modelo)
## [1] "lm"
names(modelo)
## [1] "coefficients" "residuals" "effects" "rank"
## [5] "fitted.values" "assign" "qr" "df.residual"
## [9] "xlevels" "call" "terms" "model"
modelo$coefficients
## (Intercept) wt
## 37.285126 -5.344472
Los arrays se utilizan en:
Construya una matriz de ventas de 4 sucursales y 5 productos. Calcule el total por sucursal y por producto.
Construya una matriz de calificaciones de 5 estudiantes y 3 evaluaciones. Calcule el promedio por estudiante.
Construya una lista con información de tres empleados: nombre, salario y años de experiencia.
Construya una lista que almacene una matriz de ingresos y gastos de una empresa.
Construya un array de temperaturas para 3 ciudades, 4 días y 2 jornadas.
Construya un array de inventario para 2 bodegas, 4 productos y 3 meses.
Construya una lista que contenga una matriz de empleados y un array de ventas.
Construya un sistema hospitalario con una lista que incluya pacientes, médicos y un array de medicamentos por mes.
Construya un sistema universitario con estudiantes, notas y rendimiento por semestre.
Construya un sistema empresarial completo integrando matrices, listas y arrays.
Una universidad necesita organizar información académica de sus estudiantes. Para ello se debe construir un sistema en R que permita almacenar:
proyecto <- list(
programa = "Ciencia de Datos",
estudiantes = matrix(
c(20, 4.2,
21, 3.9,
23, 4.5,
22, 4.0),
nrow = 4,
byrow = TRUE
),
calificaciones = array(
c(4.0, 3.8, 4.5, 4.1,
4.2, 4.0, 4.7, 4.3,
3.9, 3.7, 4.4, 4.0,
4.1, 4.2, 4.6, 4.5),
dim = c(4, 2, 2)
)
)
colnames(proyecto$estudiantes) <- c("Edad", "Promedio")
rownames(proyecto$estudiantes) <- c("Est_1", "Est_2", "Est_3", "Est_4")
dimnames(proyecto$calificaciones) <- list(
Estudiante = c("Est_1", "Est_2", "Est_3", "Est_4"),
Asignatura = c("Estadistica", "Programacion"),
Semestre = c("Semestre_1", "Semestre_2")
)
proyecto$estudiantes
## Edad Promedio
## Est_1 20 4.2
## Est_2 21 3.9
## Est_3 23 4.5
## Est_4 22 4.0
proyecto$calificaciones
## , , Semestre = Semestre_1
##
## Asignatura
## Estudiante Estadistica Programacion
## Est_1 4.0 4.2
## Est_2 3.8 4.0
## Est_3 4.5 4.7
## Est_4 4.1 4.3
##
## , , Semestre = Semestre_2
##
## Asignatura
## Estudiante Estadistica Programacion
## Est_1 3.9 4.1
## Est_2 3.7 4.2
## Est_3 4.4 4.6
## Est_4 4.0 4.5
colMeans(proyecto$estudiantes)
## Edad Promedio
## 21.50 4.15
apply(proyecto$calificaciones, c(2, 3), mean)
## Semestre
## Asignatura Semestre_1 Semestre_2
## Estadistica 4.1 4.00
## Programacion 4.3 4.35
La matriz permite resumir características de los estudiantes. La lista permite integrar varios objetos en un único sistema. El array permite analizar el rendimiento académico por estudiante, asignatura y semestre.
Las matrices, listas y arrays son estructuras esenciales en RStudio.
Las matrices permiten representar información bidimensional homogénea. Las listas permiten almacenar objetos heterogéneos y complejos. Los arrays permiten trabajar con datos multidimensionales.
El dominio de estas estructuras es fundamental para avanzar en estadística, ciencia de datos, machine learning, inteligencia artificial y análisis computacional.
Para ampliar el estudio se recomienda revisar en RStudio:
?matrix
?list
?array
?apply
?rowSums
?colSums
?rowMeans
?colMeans