Las matrices o variables indexadas (Arrays) son generalizaciones multidimensionales de vectores. De hecho, son vectores indexados por dos o más índices y que se imprimen de modo especial. Para crearlas utilizamos la función “matrix”. Si consultamos la ayuda de R, se nos mostrara los argumentos de esta función, acá se muestran los más importantes:
data: Un vector opcional de datos
nrow: El número de filas deseadas
ncol: El número de columnas deseadas
byrow: lógico. Si es FALSE (valor por defecto) la matriz es llenada por columnas, de otra manera la matriz es llenada por filas
matrix(5:34,nrow=5)
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 5 10 15 20 25 30
## [2,] 6 11 16 21 26 31
## [3,] 7 12 17 22 27 32
## [4,] 8 13 18 23 28 33
## [5,] 9 14 19 24 29 34
matrix(5:34,nrow=5, byrow = TRUE)
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 5 6 7 8 9 10
## [2,] 11 12 13 14 15 16
## [3,] 17 18 19 20 21 22
## [4,] 23 24 25 26 27 28
## [5,] 29 30 31 32 33 34
matrix(5:34,ncol=5, byrow = TRUE)
## [,1] [,2] [,3] [,4] [,5]
## [1,] 5 6 7 8 9
## [2,] 10 11 12 13 14
## [3,] 15 16 17 18 19
## [4,] 20 21 22 23 24
## [5,] 25 26 27 28 29
## [6,] 30 31 32 33 34
Al igual que con vectores, podemos realizar operaciones con matrices:
m1<-matrix(1:12,ncol = 4)
m1
## [,1] [,2] [,3] [,4]
## [1,] 1 4 7 10
## [2,] 2 5 8 11
## [3,] 3 6 9 12
m2<-matrix(2*(1:12),ncol=4)
m2
## [,1] [,2] [,3] [,4]
## [1,] 2 8 14 20
## [2,] 4 10 16 22
## [3,] 6 12 18 24
m1+m2 #realiza la suma elemento a elemento
## [,1] [,2] [,3] [,4]
## [1,] 3 12 21 30
## [2,] 6 15 24 33
## [3,] 9 18 27 36
m1*m2 #realiza el producto elemento a elemento
## [,1] [,2] [,3] [,4]
## [1,] 2 32 98 200
## [2,] 8 50 128 242
## [3,] 18 72 162 288
m1/m2 #realiza la división elemento a elemento
## [,1] [,2] [,3] [,4]
## [1,] 0.5 0.5 0.5 0.5
## [2,] 0.5 0.5 0.5 0.5
## [3,] 0.5 0.5 0.5 0.5
Análogamente el resto de operaciones aritméticas.
También se puede realizar el producto matricial usando el operador %*%, tenga en cuenta que para que este producto este definido se necesita que el número de columnas de la primera matriz sea igual al número de filas de la segunda
m3<-matrix(1:12,ncol = 4)
m3
## [,1] [,2] [,3] [,4]
## [1,] 1 4 7 10
## [2,] 2 5 8 11
## [3,] 3 6 9 12
m4<-matrix(1:12,nrow = 4)
m4
## [,1] [,2] [,3]
## [1,] 1 5 9
## [2,] 2 6 10
## [3,] 3 7 11
## [4,] 4 8 12
m3%*%m4
## [,1] [,2] [,3]
## [1,] 70 158 246
## [2,] 80 184 288
## [3,] 90 210 330
Acceder a la componentes de una matriz:
m3[2,4] #devuelve el elemento de m3 que est[a en la fila 2, columna 4
## [1] 11
m3[c(2,3),c(1,4)] # devuelve las filas 2 y 3 de las columnas 1 y 4
## [,1] [,2]
## [1,] 2 11
## [2,] 3 12
m3[,3] #devuelve todas las filas de la columna 3
## [1] 7 8 9
También podemos acceder usando operaciones lógicas:
Supongamos que queremos extraer los elementos pares y mayores que 8
m5<-matrix(c(16,24,56,2,6,-4,4,0,6,10:20),4)
m5
## [,1] [,2] [,3] [,4] [,5]
## [1,] 16 6 6 13 17
## [2,] 24 -4 10 14 18
## [3,] 56 4 11 15 19
## [4,] 2 0 12 16 20
m5[m5>8 & m5%%2==0] # %% operador módulo (resto de una división])
## [1] 16 24 56 10 12 14 16 18 20
Una hoja de datos (data.frames) es muy similar a una matriz, la diferencia fundamental con la matriz de datos es que este objeto no tiene por qué estar compuesto de elementos del mismo tipo. Los objetos pueden ser vectores, factores, matrices, listas e incluso hojas de datos.
datos1<-data.frame(Peso=c(90,120,56), Altura=c(1.90,1.87,1.70))
datos1
## Peso Altura
## 1 90 1.90
## 2 120 1.87
## 3 56 1.70
datos2<-data.frame(datos1, Sexo=c("Hombre","Hombre","Mujer"))
datos2
## Peso Altura Sexo
## 1 90 1.90 Hombre
## 2 120 1.87 Hombre
## 3 56 1.70 Mujer
Para acceder a los elementos de un data.frame puede imitar lo realizado con vectores y matrices.
Existe otra manera de acceder a los elementos de una matriz; usando el operador $
datos2$Altura
## [1] 1.90 1.87 1.70