es una extensión de un vector a dos dimensiones, lo que implica que dispone del atributo dimension. El atributo dimensión es en si mismo un vector de longitud 2 (numero de filas, numero de columnas). Una matriz se utiliza para representar datos de un único tipo en dos dimensiones.
Las matrices son vectores, pero que están dispuestos en renglones y columnas, por ejemplo:
m1 <- matrix(1:20, nrow = 4, ncol = 5)
Genera una matriz de 4 renglones por 5 columnas. Experimenta con:
print(m1)
## [,1] [,2] [,3] [,4] [,5]
## [1,] 1 5 9 13 17
## [2,] 2 6 10 14 18
## [3,] 3 7 11 15 19
## [4,] 4 8 12 16 20
Nota que para hacer alusión a un elemento particular de una matriz se deben especificar dos subíndices, el primero para el reglón y el segundo para la columna. Así, si queremos saber el valor del elemento en el renglón 3, columna 2, debemos escribir:
m1[3,2]
## [1] 7
Para obtener un renglón completo de una matriz, por ejemplo e renglón 4, escribimos:
m1[4, ]
## [1] 4 8 12 16 20
De la misma manera podemos hacerlo para una columna completa, por ejemplo la 3:
m1[, 3]
## [1] 9 10 11 12
¿Qué hacen los siguientes estatutos?
m1[2, 1:3] #fila 2, columnas del 1 al 3
## [1] 2 6 10
m1[3, -5] #fila3, columnas...todas menos la columna5
## [1] 3 7 11 15
m1[2:4, 1] #fila 2 a 4, columna 1
## [1] 2 3 4
m1[-3, 4] # todas menos la fila 3, columna 4
## [1] 13 14 16
A partir de un vector, si le añadimos el atributo dimensión podemos obtener una matriz:
m <- 1:12
m
## [1] 1 2 3 4 5 6 7 8 9 10 11 12
dim(m) <- c(4, 3)
m
## [,1] [,2] [,3]
## [1,] 1 5 9
## [2,] 2 6 10
## [3,] 3 7 11
## [4,] 4 8 12
Cuando creamos una matriz, los valores que pasamos son ordenados por columnas. Pero también es posible llenar la matriz por filas especificando el argumento byrow = TRUE:
matriz <- matrix(1:12, nrow = 4, byrow = TRUE)
matriz
## [,1] [,2] [,3]
## [1,] 1 2 3
## [2,] 4 5 6
## [3,] 7 8 9
## [4,] 10 11 12
matriz <- matrix(1:12, nrow = 4, ncol = 3)
matriz
## [,1] [,2] [,3]
## [1,] 1 5 9
## [2,] 2 6 10
## [3,] 3 7 11
## [4,] 4 8 12
En el siguiente ejemplo hacemos uso del argumento dimnames para dar nombre a las filas y columnas:
automoviles <- matrix(
1:12,
nrow = 4,
byrow = TRUE,
dimnames = list(
c("Blanco", "Rojo", "Negro", "Gris"),
c("Toyota", "Audi", "Nissan")
)
)
automoviles
## Toyota Audi Nissan
## Blanco 1 2 3
## Rojo 4 5 6
## Negro 7 8 9
## Gris 10 11 12
Mediante las funciones cbind() y rbind() es posible crear matrices por columnas o por filas a partir de dos vectores de la misma longitud:
v1 <- c(1, 2, 3)
v2 <- c(4, 5, 6)
m1 <- cbind(v1, v2) #unir por columnas
m1
## v1 v2
## [1,] 1 4
## [2,] 2 5
## [3,] 3 6
v1 <- c(1, 2, 3)
v2 <- c(4, 5, 6)
m1 <- rbind(v1, v2) #unir por filas
m1
## [,1] [,2] [,3]
## v1 1 2 3
## v2 4 5 6
Además con las funciones nrow() y ncol() podemos conocer el número de filas y columnas, respectivamente:
nrow(automoviles)
## [1] 4
ncol(automoviles)
## [1] 3
La función length() que hemos visto con anterioridad en los vectores, también funciona en matrices. Cuando trabajamos con matrices; no obstante, devuelve el producto de cada una de las dimensiones:
length(automoviles)
## [1] 12
Del mismo modo que los vectores poseen el atributo names para sus elementos, las matrices disponen de rownames y colnames para las filas y columnas.
colores <- rownames(automoviles)
colores
## [1] "Blanco" "Rojo" "Negro" "Gris"
marcas <- colnames(automoviles)
marcas
## [1] "Toyota" "Audi" "Nissan"
Por medio de la función dimnames() obtendremos una lista que contiene dos vectores con los atributos rownames y colnames:
dimnames(automoviles)
## [[1]]
## [1] "Blanco" "Rojo" "Negro" "Gris"
##
## [[2]]
## [1] "Toyota" "Audi" "Nissan"
La función diag() extrae la diagonal principal de una matriz:
A <- matrix(c(1, 2, 3, 4, 5, 6, 7, 8, 9), nrow = 3, ncol = 3, byrow = TRUE)
A
## [,1] [,2] [,3]
## [1,] 1 2 3
## [2,] 4 5 6
## [3,] 7 8 9
diag(A)
## [1] 1 5 9
Además, diag() nos permite crear matrices diagonales:
diag(c(1, 2, 3, 4))
## [,1] [,2] [,3] [,4]
## [1,] 1 0 0 0
## [2,] 0 2 0 0
## [3,] 0 0 3 0
## [4,] 0 0 0 4
La matriz identidad es muy fácil de crear en R. Por ejemplo, la matriz identidad de dimensión 4 es:
Id<- diag(1, nrow = 4)
Id
## [,1] [,2] [,3] [,4]
## [1,] 1 0 0 0
## [2,] 0 1 0 0
## [3,] 0 0 1 0
## [4,] 0 0 0 1
Los elementos de una matriz están indexados con dos índices lo cual hace que resulte fácil acceder a los elementos y trabajar con ellos si lo que nos interesa es sólo una parte de la información contenida en una matriz y no la matriz entera, esto se logra con el operador de indexación [i, j] donde i es el elemento fila y j es el elemento columna.
Siguiendo con el ejemplo anterior, si quisiéramos seleccionar el número de automóviles blancos correspondiente a la marca Audi podríamos hacerlo de dos maneras:
Escribiendo el nombre de la matriz y entre corchetes los nombres de la fila y columnas entre comillas:
automoviles["Blanco", "Audi"]
## [1] 2
Alternativamente, podemos utilizar la notación de índices:
automoviles[1, 2]
## [1] 2
También podemos seleccionar columnas y filas enteras, de manera que si queremos seleccionar todos los automóviles blancos lo haríamos del siguiente modo:
automoviles[1,]
## Toyota Audi Nissan
## 1 2 3
# otra forma de hacerlo es
automoviles["Blanco",]
## Toyota Audi Nissan
## 1 2 3
Podemos emplear las funciones cbind() y
rbind() para agregar filas y columnas a una matriz que
hemos creado con anterioridad:
# Añadimos una nueva fila a la matriz
verde <- c(8, 5, 7)
automoviles <- rbind(automoviles, verde)
automoviles
## Toyota Audi Nissan
## Blanco 1 2 3
## Rojo 4 5 6
## Negro 7 8 9
## Gris 10 11 12
## verde 8 5 7
# Añadimos una nueva columna
Ford <- c(2, 7, 3, 5, 9)
automoviles <- cbind(automoviles, Ford)
automoviles
## Toyota Audi Nissan Ford
## Blanco 1 2 3 2
## Rojo 4 5 6 7
## Negro 7 8 9 3
## Gris 10 11 12 5
## verde 8 5 7 9
Eliminar Filas y Columnas
Para eliminar filas utilizaremos la notación [-i,], de forma similar para eliminar columnas utilizaremos la notación [, -j]. A modo de ejemplo, vamos a eliminar la fila y columna que hemos añadido en el apartado anterior:
#Eliminando la fila verde
automoviles[-5, ]
## Toyota Audi Nissan Ford
## Blanco 1 2 3 2
## Rojo 4 5 6 7
## Negro 7 8 9 3
## Gris 10 11 12 5
# Eliminando columna ford
automoviles[, -4]
## Toyota Audi Nissan
## Blanco 1 2 3
## Rojo 4 5 6
## Negro 7 8 9
## Gris 10 11 12
## verde 8 5 7