PAMPHLET II

TIPOS DE DATOS II

MATRICES

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

LIST

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
Fusion de Listas

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"

DATA FRAME

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.

Como crear una data frame vacio
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

A MODO DE RESUMEN.

  • 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.