Una matriz es un conjunto de números ordenados en filas y columnas. En R se pueden crear matrices con mas de dos dimensiones
Crearemos algunos ejemplos
Matriz_1 <- matrix(1:10, byrow = T, nrow = 5)
Matriz_1
## [,1] [,2]
## [1,] 1 2
## [2,] 3 4
## [3,] 5 6
## [4,] 7 8
## [5,] 9 10
Matriz_2 <- matrix(1:12, byrow = T, nrow = 3)
Matriz_2
## [,1] [,2] [,3] [,4]
## [1,] 1 2 3 4
## [2,] 5 6 7 8
## [3,] 9 10 11 12
Matriz_3 <- matrix(1:12, byrow = T, ncol = 3)
Matriz_3
## [,1] [,2] [,3]
## [1,] 1 2 3
## [2,] 4 5 6
## [3,] 7 8 9
## [4,] 10 11 12
Una herramienta valiosa en la utilizacion de matrices es poder agregar columnas, para esto existe una funcion que nos permite hacer esta accion
matriz_add <- cbind(Matriz_1, c(1:5))
matriz_add
## [,1] [,2] [,3]
## [1,] 1 2 1
## [2,] 3 4 2
## [3,] 5 6 3
## [4,] 7 8 4
## [5,] 9 10 5
dim(matriz_add)
## [1] 5 3
Quedando una matriz distinta de dimensiones de 5 x 3.
Se puede agregar mas que una columna a la matriz, como veremos a continuacion.
matriz_add2 <- matrix(13:24, byrow = F, ncol = 3)
matriz_add2
## [,1] [,2] [,3]
## [1,] 13 17 21
## [2,] 14 18 22
## [3,] 15 19 23
## [4,] 16 20 24
matriz_add3 <- matrix(1:12, byrow = F, ncol = 3)
matriz_add3
## [,1] [,2] [,3]
## [1,] 1 5 9
## [2,] 2 6 10
## [3,] 3 7 11
## [4,] 4 8 12
matriz_add4 <- cbind(matriz_add2, matriz_add3)
matriz_add4
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 13 17 21 1 5 9
## [2,] 14 18 22 2 6 10
## [3,] 15 19 23 3 7 11
## [4,] 16 20 24 4 8 12
dim(matriz_add)
## [1] 5 3
La funcion cbind permite que se unan matrices, o se concatenen, como vimos mas arriba, esta concatenacion debe cumplir con que las matrices sean compatibles en columnas y fimas (col y row). Ademas, existe la funcion rbind, que permite agregar una fila en la matriz.
matriz_rb <- matrix(1:12, byrow = F, ncol = 3)
matriz_rb
## [,1] [,2] [,3]
## [1,] 1 5 9
## [2,] 2 6 10
## [3,] 3 7 11
## [4,] 4 8 12
Creamos un vector.
row_add <- c(1:3)
row_add
## [1] 1 2 3
Pasamos a agregar una columna con la funcion
matriz_rbind <- rbind(matriz_rb ,row_add )
matriz_rbind
## [,1] [,2] [,3]
## 1 5 9
## 2 6 10
## 3 7 11
## 4 8 12
## row_add 1 2 3
dim(matriz_rbind )
## [1] 5 3
Las listas son los objetos R que contienen elementos de diferentes tipos como: números, cadenas, vectores y otra lista dentro de él. Una lista también puede contener una matriz o una función como sus elementos. La lista se crea usando la función list ().(https://www.tutorialspoint.com/r/r_lists.htm)
lista_datos <- list("AZUL", "VERDE", c(21,32,11), TRUE, 51.23, 119.1)
print(lista_datos)
## [[1]]
## [1] "AZUL"
##
## [[2]]
## [1] "VERDE"
##
## [[3]]
## [1] 21 32 11
##
## [[4]]
## [1] TRUE
##
## [[5]]
## [1] 51.23
##
## [[6]]
## [1] 119.1
mi_lista <- list(c(1,2,3), 26.6,3,"perros")
mi_lista
## [[1]]
## [1] 1 2 3
##
## [[2]]
## [1] 26.6
##
## [[3]]
## [1] 3
##
## [[4]]
## [1] "perros"
class(mi_lista)
## [1] "list"
list_data <- list(c("ENE","FEB","MAR"), matrix(c(3,9,5,1,-2,8), nrow = 2),
list("ROJO",12.3))
list_data
## [[1]]
## [1] "ENE" "FEB" "MAR"
##
## [[2]]
## [,1] [,2] [,3]
## [1,] 3 5 -2
## [2,] 9 1 8
##
## [[3]]
## [[3]][[1]]
## [1] "ROJO"
##
## [[3]][[2]]
## [1] 12.3
De esta manera podemos darle nombres a cada uno de los elementos de las listas
names(list_data) <- c("1st Quarter", "A_Matrix", "Lista Interna")
list_data
## $`1st Quarter`
## [1] "ENE" "FEB" "MAR"
##
## $A_Matrix
## [,1] [,2] [,3]
## [1,] 3 5 -2
## [2,] 9 1 8
##
## $`Lista Interna`
## $`Lista Interna`[[1]]
## [1] "ROJO"
##
## $`Lista Interna`[[2]]
## [1] 12.3
Accede al tercer elemento. Como también es una lista, se imprimirán todos sus elementos.
print(list_data[1])
## $`1st Quarter`
## [1] "ENE" "FEB" "MAR"
print(list_data[2])
## $A_Matrix
## [,1] [,2] [,3]
## [1,] 3 5 -2
## [2,] 9 1 8
Podemos tambien obtener los datos de las ,listas utlizando el signo $ , el que nos permite ver cada uno de los elemntos de la lista.
print(list_data$A_Matrix)
## [,1] [,2] [,3]
## [1,] 3 5 -2
## [2,] 9 1 8
Puede fusionar muchas listas en una lista colocando todas las listas dentro de una función list (). Veamos el siguiente ejemplo.
Creamos 2 listas:
lista1 <- list(1,2,3)
lista2 <- list("Dom","Lun","Mar")
print(lista1)
## [[1]]
## [1] 1
##
## [[2]]
## [1] 2
##
## [[3]]
## [1] 3
print(lista2)
## [[1]]
## [1] "Dom"
##
## [[2]]
## [1] "Lun"
##
## [[3]]
## [1] "Mar"
Y las fusionamos
merged.lista <- c(lista1,lista2)
print(merged.lista)
## [[1]]
## [1] 1
##
## [[2]]
## [1] 2
##
## [[3]]
## [1] 3
##
## [[4]]
## [1] "Dom"
##
## [[5]]
## [1] "Lun"
##
## [[6]]
## [1] "Mar"
Esta es una estructura llamada data frame, nos permite guardar y tabular datos para su posterior manipulacion. Tambien nos permite tener distintos tipos de datos , no asi las matrices.
Este es un ejemplo de dataframe , en donde tenemos distintos tipos de datos
data("mtcars")
head(mtcars[1:4])
## mpg cyl disp hp
## Mazda RX4 21.0 6 160 110
## Mazda RX4 Wag 21.0 6 160 110
## Datsun 710 22.8 4 108 93
## Hornet 4 Drive 21.4 6 258 110
## Hornet Sportabout 18.7 8 360 175
## Valiant 18.1 6 225 105
str(mtcars)
## 'data.frame': 32 obs. of 11 variables:
## $ mpg : num 21 21 22.8 21.4 18.7 18.1 14.3 24.4 22.8 19.2 ...
## $ cyl : num 6 6 4 6 8 6 8 4 4 6 ...
## $ disp: num 160 160 108 258 360 ...
## $ hp : num 110 110 93 110 175 105 245 62 95 123 ...
## $ drat: num 3.9 3.9 3.85 3.08 3.15 2.76 3.21 3.69 3.92 3.92 ...
## $ wt : num 2.62 2.88 2.32 3.21 3.44 ...
## $ qsec: num 16.5 17 18.6 19.4 17 ...
## $ vs : num 0 0 1 1 0 1 0 1 1 1 ...
## $ am : num 1 1 1 0 0 0 0 0 0 0 ...
## $ gear: num 4 4 4 3 3 3 3 4 4 4 ...
## $ carb: num 4 4 1 1 2 1 4 2 2 4 ...
Con el comando str() podemos ver las caracteristicas de cada uno de los elementos que estan en los datos de mtcars.
qw <- data.frame("CANTIDAD" = c(1:2),
"EDAD" = c(23,56),
"NOMBRE" = c("Adrian", "Maria"),
stringsAsFactors = F)
print(qw)
## CANTIDAD EDAD NOMBRE
## 1 1 23 Adrian
## 2 2 56 Maria
Como podemos ver en esta base de datos tenemos diferentes tipos de datos INTERGER, NUMERIC y CHARACTER.
Si necesitamos realizar algun cambio de valor de la data, podemos utilizar los siguientes comandos.
qw[1, "EDAD"] <- 54;qw
## CANTIDAD EDAD NOMBRE
## 1 1 54 Adrian
## 2 2 56 Maria
Donde 1 , indica la fila a la que queremos acceder, y EDAD indica la columna a la cual nos referimos , posterior de <- indicamos con edad que se cambiara, es decir fila 1 y columna 1.
Tambien podemos agregar ROW a la data con la funcion rbind()
rbind(qw, list(3,20,"Marcelo"))
## CANTIDAD EDAD NOMBRE
## 1 1 54 Adrian
## 2 2 56 Maria
## 3 3 20 Marcelo
Con este comando agregamos una fila completa (3,20,Marcelo). Tambien si deseamos podemos agregar columnas, esto con el siguiente comando.
cbind(qw, DEUDA = c(10000,5000))
## CANTIDAD EDAD NOMBRE DEUDA
## 1 1 54 Adrian 10000
## 2 2 56 Maria 5000
De esta manera podemos agregar cuantas columnas necesitemos. Se puede agrgar tambien tipos de de datos CHARACTER u otros, como vemos en este ejemplo.
qw_1 <-cbind(qw, DEUDA = c(10000,5000),
GASTO =c(400,900),
SITUACION = c("AHORRADOR", "GASTADOS"))
qw_1
## CANTIDAD EDAD NOMBRE DEUDA GASTO SITUACION
## 1 1 54 Adrian 10000 400 AHORRADOR
## 2 2 56 Maria 5000 900 GASTADOS
En cada cosa que uno emprende , siempre se cometenerrores y se necesita borrar o eliminar algo que uno considera que ya no debe estar. Existe un comando que permite elininar lo creado o agregado en la data que se trabaja. Veamos un ejemplo:
qw_1$SITUACION <- NULL
qw_1
## CANTIDAD EDAD NOMBRE DEUDA GASTO
## 1 1 54 Adrian 10000 400
## 2 2 56 Maria 5000 900
Como vemos la columna SITUACION ha desaparecido, este ejercicio se puede realizar con cualquiera de las columnas.
dat_L <- data.frame(character(6), numeric(6), stringsAsFactors = FALSE)
for (i in 1:6)
{
dat_L[i,1]<-as.character("Como estas")
dat_L[i,2]<- i* 89
}
dat_L
## character.6. numeric.6.
## 1 Como estas 89
## 2 Como estas 178
## 3 Como estas 267
## 4 Como estas 356
## 5 Como estas 445
## 6 Como estas 534
df <- data.frame(Doubles=double(),
Ints=integer(),
Factors=factor(),
Logicals=logical(),
Characters=character(),
stringsAsFactors=FALSE)
str(df)
## 'data.frame': 0 obs. of 5 variables:
## $ Doubles : num
## $ Ints : int
## $ Factors : Factor w/ 0 levels:
## $ Logicals : logi
## $ Characters: chr
df_1 <- data.frame(Date=as.Date(character()),
File=character(),
User=character(),
stringsAsFactors=FALSE)
str(df_1)
## 'data.frame': 0 obs. of 3 variables:
## $ Date: 'Date' num(0)
## $ File: chr
## $ User: chr
# Create empty data.frame with matrix & setNames functions
data_2 <- setNames(data.frame(matrix(ncol = 3, nrow = 3)), c("Col_1", "Col_2", "Col_3"))
str(data_2)
## 'data.frame': 3 obs. of 3 variables:
## $ Col_1: logi NA NA NA
## $ Col_2: logi NA NA NA
## $ Col_3: logi NA NA NA
# The most efficient way to do this is to use structure to create a list that has the class
structure(list(Date = as.Date(character()), File = character(), User = character()),
class = "data.frame")
## [1] Date File User
## <0 rows> (or 0-length row.names)
create_empty_table <- function(num_rows, num_cols) {
frame <- data.frame(matrix(NA, nrow = num_rows, ncol = num_cols))
return(frame)
}
create_empty_table(3,3)
## X1 X2 X3
## 1 NA NA NA
## 2 NA NA NA
## 3 NA NA NA
Creando una Data vacia con nombres
df_w <- read.csv(text="Fecha,Cliente,Mail,Renta",
colClasses = c("Date", "character", "integer","numeric"))
str(df_w)
## 'data.frame': 0 obs. of 4 variables:
## $ Fecha : 'Date' num(0)
## $ Cliente: chr
## $ Mail : int
## $ Renta : num
Un Vector es un objeto que guarda elementos del mismo tipo
Una Lista es un objeto que me permite guardar elementos de diferente tipo
Una Matriz es un conjunto de datos representado por la figura geometrica de un rectangulo, estos datos pueden ser modificados,agragados y borrados.
Los Data Frame , son un tipo de datos que me permite tabular informacion, estos datos pueden ser de distintos tipos.