Matrices en R

DataScience
R
Published

June 10, 2026

Modified

June 11, 2026

Una matriz es un arreglo bidimensional de elementos del mismo tipo, dispuestos en un número fijo de filas y columnas. Pueden ser creadas con la función matrix(). Veamos un ejemplo:

Construyamos una matriz con nueve elementos dispuestos en tres filas. R sabrá que debe rellenar por filas si se lo decimos con byrow=T (recuerda dar clic en la palabra Code para mostrar el código R).

Code
matrix(c(1:9), byrow = T, nrow = 3)
     [,1] [,2] [,3]
[1,]    1    2    3
[2,]    4    5    6
[3,]    7    8    9

Bien, realicemos unos ejercicios con matrices. Les daremos nombres a sus columnas y filas, las modificaremos y haremos operaciones con ellas.

Creación y modificación básica

Como primer ejercicio, vamos a crear una matriz a partir de unos cuantos vectores que contienen las cifras de taquilla de las primeras tres películas “principales” de la franquicia Star Wars. La primera cifra se corresponde con Estados Unidos y la segunda con el resto del mundo.

Code
# Primero creamos los vectores
new_hope <- c(460.998, 314.4)
empire_strikes <- c(290.475, 247.900)
return_jedi <- c(309.306, 165.8)

# Luego la matriz a partir de ellos
taquilla <- matrix(c(new_hope, empire_strikes, return_jedi),
    byrow = T, nrow = 3)

# Mostramos la matriz
taquilla
        [,1]  [,2]
[1,] 460.998 314.4
[2,] 290.475 247.9
[3,] 309.306 165.8

Ahora agreguemos los nombres de columnas y filas para identificar de mejor manera los elementos de la matriz.

Code
# Nombremos los elementos de la matriz
# Columnas
region <- c("US", "Non-US")

# Filas
nombres <- c("A New Hope", "The Empire Strikes Back", "Return of the Jedi")

# Nombramos columnas
colnames(taquilla) <- region

# Nombramos filas
rownames(taquilla) <- nombres

# Imprimimos la matriz
taquilla
                             US Non-US
A New Hope              460.998  314.4
The Empire Strikes Back 290.475  247.9
Return of the Jedi      309.306  165.8

Agregando columnas

Una función muy útil cuando se trabaja con matrices es la suma por fila. Veamos cómo se realiza:

Code
# Calculemos la taquilla por película
total <- rowSums(taquilla)

# Mostremos el resultado
total
             A New Hope The Empire Strikes Back      Return of the Jedi 
                775.398                 538.375                 475.106 

Con este nuevo vector podemos añadir más información a la matriz. Agreguémoslo como una nueva columna:

Code
taquilla_total <- cbind(taquilla, total)

# Imprimimos la nueva matriz
taquilla_total
                             US Non-US   total
A New Hope              460.998  314.4 775.398
The Empire Strikes Back 290.475  247.9 538.375
Return of the Jedi      309.306  165.8 475.106

Agregando filas

Ahora probaremos cómo es posible unir dos matrices similares. Crearemos otra con los datos de las precuelas y la añadiremos como tres filas nuevas para crear una matriz más amplia (pero aún con dos columnas de datos).

Code
# Creamos la matriz con las precuelas
taquilla_precuelas <- matrix(c(474.5, 552.5, 310.7, 338.7, 380.3, 468.5),
                             byrow = TRUE, nrow = 3)

# Creamos el vector con los nombres
nombres_precuelas <- c("The Phantom Menace", "Attack of the Clones",
                       "Revenge of the Sith")

# Nombramos las filas
rownames(taquilla_precuelas) <- nombres_precuelas

# Unimos ambas matrices
taquilla_todas <- rbind(taquilla, taquilla_precuelas)

# Imprimimos la matriz final
taquilla_todas
                             US Non-US
A New Hope              460.998  314.4
The Empire Strikes Back 290.475  247.9
Return of the Jedi      309.306  165.8
The Phantom Menace      474.500  552.5
Attack of the Clones    310.700  338.7
Revenge of the Sith     380.300  468.5

Y con esto realizado, podemos abordar la suma por columnas. Tomemos la matriz completa y calculemos la totalidad de la taquilla tanto dentro como fuera de los Estados Unidos:

Code
# Calculemos el total de taquilla por región
taquilla_region <- colSums(taquilla_todas)

# Mostremos el resultado
taquilla_region
      US   Non-US 
2226.279 2087.800 

Selección de elementos

Al igual que con los vectores, podemos seleccionar elementos en una matriz mediante corchetes. También es posible seleccionar rangos. Veamos unos ejemplos:

Code
# Primero recordemos los elementos de la matriz
taquilla_todas
                             US Non-US
A New Hope              460.998  314.4
The Empire Strikes Back 290.475  247.9
Return of the Jedi      309.306  165.8
The Phantom Menace      474.500  552.5
Attack of the Clones    310.700  338.7
Revenge of the Sith     380.300  468.5
Code
# Mostremos solo la taquilla fuera de los EU
taquilla_todas[,2]
             A New Hope The Empire Strikes Back      Return of the Jedi 
                  314.4                   247.9                   165.8 
     The Phantom Menace    Attack of the Clones     Revenge of the Sith 
                  552.5                   338.7                   468.5 
Code
# Calculemos solo la media de esa taquilla
mean(taquilla_todas[,2])
[1] 347.9667
Code
# Seleccionemos solo la taquilla de las primeras dos
taquilla_todas[1:2,2]
             A New Hope The Empire Strikes Back 
                  314.4                   247.9 
Code
# Calculemos su media
mean(taquilla_todas[1:2,2])
[1] 281.15

Aritmética con matrices

También podemos realizar operaciones con las matrices. Pongamos de ejemplo que deseamos calcular cuántas personas fueron a ver las películas, suponiendo que las entradas costaran cinco dólares. Tomemos la matriz final y dividámosla entre 5:

Code
# Para calcular la asistencia
# dividamos entre 5
asistentes <- taquilla_todas / 5

# Mostremos el resultado
asistentes
                             US Non-US
A New Hope              92.1996  62.88
The Empire Strikes Back 58.0950  49.58
Return of the Jedi      61.8612  33.16
The Phantom Menace      94.9000 110.50
Attack of the Clones    62.1400  67.74
Revenge of the Sith     76.0600  93.70

Pero resulta que nuestra suposición no es del todo correcta, ya que nos proveen la tabla con los precios reales de los boletos (que también son supuestos, pero un poco más “realistas”). Los consideramos para volver a realizar el cálculo:

Code
# Creamos la matriz con los precios
precios <- matrix(c(5,5,6,6,7,7,4,4,4.5,4.5,4.9,4.9),
                  byrow = TRUE, nrow = 6)

# Dividamos la primera entre la segunda
asistentes_reales <- taquilla_todas / precios

# Mostremos los asistentes reales
asistentes_reales
                               US    Non-US
A New Hope               92.19960  62.88000
The Empire Strikes Back  48.41250  41.31667
Return of the Jedi       44.18657  23.68571
The Phantom Menace      118.62500 138.12500
Attack of the Clones     69.04444  75.26667
Revenge of the Sith      77.61224  95.61224

Ejercicio final

¿Por qué no calcular cuánto recaudaron las películas a partir de los datos que tenemos?

Tomemos la matriz con toda la taquilla, calculemos el total por región, lo agregamos y al final sacamos el total por película, para también agregarlo.

Code
# Calculemos y agreguemos la suma de columnas
taquilla_todas <- rbind(taquilla_todas, colSums(taquilla_todas))

# Ahora calculemos la suma de filas
taquilla_todas <- cbind(taquilla_todas, rowSums(taquilla_todas))

# Mostremos
taquilla_todas
                              US Non-US         
A New Hope               460.998  314.4  775.398
The Empire Strikes Back  290.475  247.9  538.375
Return of the Jedi       309.306  165.8  475.106
The Phantom Menace       474.500  552.5 1027.000
Attack of the Clones     310.700  338.7  649.400
Revenge of the Sith      380.300  468.5  848.800
                        2226.279 2087.8 4314.079

Listo, sabemos que la recaudación total fue de 4314.079 dólares.

Back to top