La forma más simple de crear una matriz en R, es mediante la función matrix(), que usa cinco argumentos
Se crea una matriz M de 2x3
M <- matrix(nrow = 2, ncol = 3)Para visualizar la matriz M
MDebido a que no se ha definido elemento alguno, R muestra las literales “NA”" (Not Available): Para crear una matriz con elementos en columnas, por ejemplo, mediante columnas con los datos: (1, 2, 3, 4, 5, 6), se ejecuta
M1 <- matrix(c(1,2,3,4,5,6),nrow = 2, ncol = 3)Para visualizar la matriz M1
M1Para crearla por filas
M1 <- matrix(c(1,2,3,4,5,6),nrow = 2, ncol = 3, byrow=TRUE);M1Por último, se puede añadir nombres a los índices de columnas, por ejemplo: Naranjas, Plátanos y Melón, y en las filas: Supermercado y Tienda
M1 <- matrix(c(1,2,3,4,5,6),nrow = 2, ncol = 3, byrow=TRUE, dimnames=list(c("Supermercado", "Tienda"), c("Naranjas", "Plátanos", "Melón")));M1Para acceder a la matriz anteriormente declarada, M1, al elemento [2,3]
M1[2,3]Para acceder a todos los elementos de una columna, por ejemplo en la matriz M1, acceder a los elementos de la columna 3
M1[,3]Otra forma de nombrar a las filas y columnas de una matriz
Se crea la matriz M2 de 5x4
M2 <- matrix(11:30, nrow = 5, ncol = 4, byrow = TRUE);M2Adicionalmente, a los renglones y las columnas de una matriz, es posible asignar nombres, que luego pueden ser consultados o usados como índices. Para nombrar a la columnas se utiliza rownames
rownames(M2) <- c("uno", "dos", "tres", "cuatro", "cinco")Para nombrar a la columnas se utiliza colnames
colnames(M2) <- c("UNO", "DOS", "TRES", "CUATRO")Para visualizar la matriz M2
M2Para consultar los nombres de las columnas
colnames(M2)Para consultar una columna
M2[, "DOS"]Las funciones rbind() y cbind(), son otras que se pueden utilizar para construir matrices, mediante la definición de los renglones o las columnas individuales respectivamente.
Se crea una matriz M3 con la función rbind()
M3 <- rbind(c(1.5, 3.2, -5.5), c(0, -1.1, 60));M3La función class() devuelve la clase del objeto
class(M3[1, ])Se crea una matriz M4 con la función cbind()
M4 <- cbind(c(1.5, 3.2, -5.5), c(0, -1.1, 60));M4Considere las siguientes matrices
B<-matrix(c(1,2,3,4),nrow=2,ncol=2);B## [,1] [,2]
## [1,] 1 3
## [2,] 2 4
A<-matrix(c(5,6,7,8),nrow=2,ncol=2);AA+BA%*%BRealizar el producto cruzado de matrices
crossprod(A,B)crossprod(A,B) # que es equivalente a t(A)%%B crossprod(A) # t(A)%%A
A-BProducto elemento por elemento de dos matrices siempre y cuando sean de dimensiones correctas.
A*BA continuación, se muestra las más funciones más comunes, ya definidas en R, para trabajar con matrices:
Devuelve la dimensión de la matriz.
dim(A) Devuelve la transpuesta de la matriz.
t(A)Devuelve el determinante de la matriz.
det(A) Devuelve la inversa de la matriz.
solve(A) Devuelve la diagonal de la matriz en forma de vector.
diag(A) Devuelve la traza de una matriz (o sea la suma de los elementos de la diagonal principal)
sum(diag(A)) Devuelve la suma de las columnas de la matriz.
colSums(A) Devuelve la suma de las filas de la matriz.
rowSums(A) Objeto tipo FACTOR
Un factor es un vector utilizado para especificar una clasificación discreta de los elementos de otro vector de igual longitud. En R existen factores nominales y factores ordinales.
Se dispone de una muestra de 30 personas de Australia de tal modo que su Estado o territorio se especifica mediante un vector de caracteres con las abreviaturas de los mismos:
estado <- c("tas","sa","qld","nsw","nsw","nt", "wa", "wa", "qld","vic","nsw","vic","qld","qld","sa","tas", "sa","nt","wa","vic","qld","nsw", "nsw", "wa", "sa","act","nsw","vic","vic","act")Se utiliza la función factor con el vector Estado
FactorEstado <- factor(estado)Para visualizar los niveles de Estado se ejecuta los siguiente
levels(FactorEstado)Se crea el vector ingresos
ingresos <- c(60, 49, 40, 61, 64, 60, 59, 54, 62, 69, 70, 42, 56,
61, 61, 61, 58, 51, 48, 65, 49, 49, 41, 48, 52, 46,
59, 46, 58, 43)Para calcular la media muestral de cada estado se usa la función tapply():
MediaIngresos <- tapply(ingresos, FactorEstado, mean);MediaIngresosDevuelve el vector de medias con las componentes etiquetadas con los niveles
Base de datos para un diseño en bloques al azar
Se crea el vector y
y<- c(34.45, 90.55, 88.45, 64.60, 60.20, 64.50, 39.90, 49.45, 75.75, 33.50, 40.15, 11.05, 46.75, 31.85, 59.90, 74.20, 92.60, 48.90, 59.35, 19.15, 33.75, 80.55, 28.85, 14.75, 09.95, 06.85, 42.45, 62.85, 70.90, 35.25, 40.15, 59.70, 25.85, 29.85, 74.90, 31.55, 24.35, 06.75, 12.30)Para visualizar el tamaño de muestra se ejecuta
n<- length(y)Se crea el vector t. Número de tratamientos
t<- 13Se crea el vector b. Número de bloques
b<- 3Se crea el vector bloque utilizando la función factor
bloque<- factor(rep(c("B1","B2","B3"),time=c(t,t,t))); bloqueSe crea el vector parcelas utilizando la función factor
parcelas<- factor(rep(c(1:t), time=b)); parcelasSe crea ek vector trat utilizando la función factor
trat<- factor(rep(c(1:t), times=b), labels=c("T1","T2","T3","T4","T5","T6","T7","T8","T9","T10","T11","T12","T13"));tratSe crea el Data frame DBA que contiene los vectores creados.
DBA<- data.frame(bloque, parcelas, trat,y); DBACrear el vector sexo. Prestar atención que se trata de un objeto Vector de caracteres
sexo<-c("H","H","H","M","M","M","H","H","H","M","M","H")Ahora lo vamos a convertir en un objeto tipo FACTOR, creando el objeto sexo1, utilizando la función as.factor
sexo1<-as.factor(sexo)Para revisar la Clase del objeto se ejecuta
class(sexo1)Para revisar el tipo de objeto se ejecuta
mode(sexo)mode(sexo1)Para ver los componentes del objeto se ejecuta
str(sexo)La función ****gl** (generador de niveles) es muy útil porque genera series regulares de factores.
La función tiene la forma gl(k, n) donde k es el número de niveles (o clases), y n es el número de réplicas en cada nivel
Se pueden usar dos opciones: length para especificar el número de datos producidos, y labels para especificar los nombres de los factores.
Ejemplos:
gl(3, 5)
gl(3, 5, length=30)
gl(2, 10)
gl(2, 1, length=20)
gl(2, 2, length=20)La función expand.grid crea un marco de datos con todas las combinaciones de vectores o factores proporcionados como argumentos:
expand.grid(a=c(60,80), p=c(100, 300), sexo=c("Macho", "Hembra"))