Tipo de datos

# 1. Númerico 
dato_numerico <- 1.5

# 2. Entero 
as.integer(6) -> un_entero #Usando as.integer
5L -> un_entero2 # Usando "L"

# 3. Lógico 
as.logical(TRUE) -> un_valor_logico
T -> un_valor_logico2
F -> un_valor_logico3

# 4. Cadena de texto
"johan" -> una_cadena
"5.5" -> una_cadena2

Para verificar el tipo de dato se utiliza el comando “class”

class(un_valor_logico)
## [1] "logical"
class(un_entero)
## [1] "integer"

Coerción

En R los datos pueden ser coercionados ( forzados) para transformarlos de un tipo a otro. Esto ocurre en el siguiente orden: lógico > entero > numérico > cadena de texto (logical > integer > numeric > character) La coerción no puede ocurrir en un orden inverso

coercion1 <- as.integer(un_valor_logico)
coercion2 <- as.numeric(un_entero)

una_cadena2 |> as.numeric() |> class()
## [1] "numeric"

Vectores

vector_numerico <- c(8,5,9,10,21,4.5,9.6,5)

#Extraer un elemento especifico
vector_numerico[6]
## [1] 4.5
#Largo de un elemento con "length"
length(vector_numerico)
## [1] 8
#Extraer el primer y último elemento 
vector_numerico[c(1, length(vector_numerico))]
## [1] 8 5

En las secuencias númericas con “:”, existe un número de inicio y de final para la secuencia. ejemplo: 1:10.

Si nuestro numero de inicio tiene decimales, este será respetado, sin embargo, si es nuestro número final el que tiene cifras decimales, este será redondeado.

1:20
##  [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
#Extraer los primeros 3 elementos 
vector_numerico[1:3]
## [1] 8 5 9
#Extraer los últimos 3 elementos
n <- length(vector_numerico)
vector_numerico[(n-3+1):n]
## [1] 4.5 9.6 5.0
#Extraer elementos mayores que 8
vector_numerico >=8
## [1]  TRUE FALSE  TRUE  TRUE  TRUE FALSE  TRUE FALSE
#Extraer elementos que solo cumplan con ser mayores que 8
condicion<- vector_numerico >=8
vector_numerico[condicion]
## [1]  8.0  9.0 10.0 21.0  9.6
#Extraer elementos que solo cumplan con ser mayores que 8 y menores que 10
condicion2<- vector_numerico >=9 & vector_numerico < 10
vector_numerico[condicion2]
## [1] 9.0 9.6
#Extraer elementos que solo cumplan con ser mayores que 5 y menores que 5.95
condicion3 <- vector_numerico >= 5 & vector_numerico < 5.95
vector_numerico[condicion3]
## [1] 5 5
#Extraer elementos que solo cumplan con ser mayores que 5 y  menores que 5.95 ó menores que 4
condicion4 <- condicion3 | vector_numerico < 4
vector_numerico [condicion4]
## [1] 5 5
# Cambiar el elemento 5 del vector
otra_condicion <- vector_numerico == 5
otra_condicion
## [1] FALSE  TRUE FALSE FALSE FALSE FALSE FALSE  TRUE
as.integer(otra_condicion)
## [1] 0 1 0 0 0 0 0 1
vector_numerico[8]<-6
vector_numerico
## [1]  8.0  5.0  9.0 10.0 21.0  4.5  9.6  6.0
nuevo_vector_numerico <-vector(mode = "numeric", length = 10L )
nuevo_vector_numerico
##  [1] 0 0 0 0 0 0 0 0 0 0
#Guardar en la séptima posición el valor de 10

nuevo_vector_numerico[7] <-10
nuevo_vector_numerico[7]
## [1] 10
#Guardar en la tercera posición el valor de 6

nuevo_vector_numerico[3] <-6
nuevo_vector_numerico[3]
## [1] 6
#Guardar como variable (escalar) el valor de la tercera posición en vez de guardarlo como vector

nuevo_vector_numerico[3]
## [1] 6
nuevo_vector_numerico[3] -> mi_variable
mi_variable
## [1] 6

Matrices

“data” es la información de la matriz, “nrow” es el número de filas y “byrow” indica que la matriz se llene por filas. Si se omite “byrow”, r llena la matriz por default en columnas

matriz_numerica <- matrix(data = c(1,5,5,7,8,9,5,0,3), nrow = 3, byrow = T )
matriz_numerica
##      [,1] [,2] [,3]
## [1,]    1    5    5
## [2,]    7    8    9
## [3,]    5    0    3
# Si queremos forzar una matriz impar de 3x4, r reclica elementos de los datos que se han brindado. ncol es el número de columnas 
matriz_numerica2 <- matrix(data = c(1,5,5,7,8,9,5,0,3), nrow = 3, ncol = 4, byrow = T )
## Warning in matrix(data = c(1, 5, 5, 7, 8, 9, 5, 0, 3), nrow = 3, ncol = 4, : la
## longitud de los datos [9] no es un submúltiplo o múltiplo del número de
## columnas [4] en la matriz
matriz_numerica2
##      [,1] [,2] [,3] [,4]
## [1,]    1    5    5    7
## [2,]    8    9    5    0
## [3,]    3    1    5    5
#R ha reciclado los valores 1,5,5
matriz_caracter <- matrix(c("a", "b", "c", "d"), nrow = 2, byrow = T)
matriz_caracter
##      [,1] [,2]
## [1,] "a"  "b" 
## [2,] "c"  "d"
# El comando "class" no permite diferenciar entre matrices, por lo que se tiene que usar el comando "typeof", este también funciona para los vectores

typeof(matriz_numerica)
## [1] "double"
#"double" es númerico 

typeof(matriz_caracter)
## [1] "character"
# Para llamar al elemento "9" de la "matriz_numerica", este valor se encuentra en la columna 2 (indicado en la columna como [2,] y en la  fila 3 (indicando la fila como [,3])

matriz_numerica
##      [,1] [,2] [,3]
## [1,]    1    5    5
## [2,]    7    8    9
## [3,]    5    0    3
matriz_numerica[2,3]
## [1] 9
# Usando el operador ":", se puede llamar a una sección de la matriz original, creando una submatriz con los datos invocados

matriz_numerica
##      [,1] [,2] [,3]
## [1,]    1    5    5
## [2,]    7    8    9
## [3,]    5    0    3
matriz_numerica[1:2,1:2]
##      [,1] [,2]
## [1,]    1    5
## [2,]    7    8
matriz_numerica[2:3,2:3]
##      [,1] [,2]
## [1,]    8    9
## [2,]    0    3
# Eliminar filas y columnas de la matriz original
matriz_numerica[-2,-2]
##      [,1] [,2]
## [1,]    1    5
## [2,]    5    3
# Llamar la fila 2 y todas las columnas
matriz_numerica[2,]
## [1] 7 8 9
# Llamar la columna 3 y todas las filas
matriz_numerica[,3] 
## [1] 5 9 3
# Quitar elementos individuales

matriz_numerica[-c(1,3),]
## [1] 7 8 9
# Llamar elementos individuales

matriz_numerica[c(1,3),c(1,3)]
##      [,1] [,2]
## [1,]    1    5
## [2,]    5    3

La diferencia entre los operadores “:” y “c()” es que el operador “:” genera una secuencia continua, mientras que “c()” llama elementos que no estén continuos

#Matriz vacía
otra_matriz_numerica <- matrix(data = 0, nrow = 4, ncol = 4 )
otra_matriz_numerica
##      [,1] [,2] [,3] [,4]
## [1,]    0    0    0    0
## [2,]    0    0    0    0
## [3,]    0    0    0    0
## [4,]    0    0    0    0

Ejemplo específico

matriz_numerica_ejemplo <- matrix(data = 1:25, nrow = 5, byrow = T)
matriz_numerica_ejemplo
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    2    3    4    5
## [2,]    6    7    8    9   10
## [3,]   11   12   13   14   15
## [4,]   16   17   18   19   20
## [5,]   21   22   23   24   25

Cambiar los números 13,14, 18 y 19 por 33

matriz_numerica_ejemplo[3:4,3:4] 
##      [,1] [,2]
## [1,]   13   14
## [2,]   18   19
matriz_numerica_ejemplo[3:4,3:4] <-33

matriz_numerica_ejemplo
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    2    3    4    5
## [2,]    6    7    8    9   10
## [3,]   11   12   33   33   15
## [4,]   16   17   33   33   20
## [5,]   21   22   23   24   25

Cambiar los números 7, 10, 22 y 24 por 0

matriz_numerica_ejemplo[c(2,5),c(2,4)]
##      [,1] [,2]
## [1,]    7    9
## [2,]   22   24
matriz_numerica_ejemplo[c(2,5),c(2,4)] <- 0
matriz_numerica_ejemplo
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    2    3    4    5
## [2,]    6    0    8    0   10
## [3,]   11   12   33   33   15
## [4,]   16   17   33   33   20
## [5,]   21    0   23    0   25

** Guardar los valores 1,2,6,0 de la submatriz [1:2,1:2] en la submatriz [3:4,3:4] con valores de 33**

submatriz_reemplazo <-matriz_numerica_ejemplo[1:2,1:2]
submatriz_reemplazo
##      [,1] [,2]
## [1,]    1    2
## [2,]    6    0
matriz_numerica_ejemplo[3:4,3:4]
##      [,1] [,2]
## [1,]   33   33
## [2,]   33   33
matriz_numerica_ejemplo[3:4,3:4] <- submatriz_reemplazo
matriz_numerica_ejemplo
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    2    3    4    5
## [2,]    6    0    8    0   10
## [3,]   11   12    1    2   15
## [4,]   16   17    6    0   20
## [5,]   21    0   23    0   25

** Cambiar los valores de 12, 1, 17 y 6 por 1, 2, 3 y 4 respectivamente**

matriz_numerica_ejemplo[3:4,2:3]
##      [,1] [,2]
## [1,]   12    1
## [2,]   17    6
matriz_numerica_ejemplo[3:4,2:3] <- matrix(data = c(1, 2, 3, 4),nrow = 2, byrow = T)
matriz_numerica_ejemplo
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    2    3    4    5
## [2,]    6    0    8    0   10
## [3,]   11    1    2    2   15
## [4,]   16    3    4    0   20
## [5,]   21    0   23    0   25

** Cambiar toda la fila 5 por 0**

matriz_numerica_ejemplo[5,]
## [1] 21  0 23  0 25
matriz_numerica_ejemplo[5,] <-0
matriz_numerica_ejemplo
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    2    3    4    5
## [2,]    6    0    8    0   10
## [3,]   11    1    2    2   15
## [4,]   16    3    4    0   20
## [5,]    0    0    0    0    0

** Cambiar toda columna 3 por 0**

matriz_numerica_ejemplo[,3]
## [1] 3 8 2 4 0
matriz_numerica_ejemplo[,3] <- 0
matriz_numerica_ejemplo
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    2    0    4    5
## [2,]    6    0    0    0   10
## [3,]   11    1    0    2   15
## [4,]   16    3    0    0   20
## [5,]    0    0    0    0    0

** Cambiar los 0 de la columna 3 por 1, 2, 3, 4, 5**

matriz_numerica_ejemplo[,3]
## [1] 0 0 0 0 0
matriz_numerica_ejemplo[,3] <- c(1, 2, 3, 4, 5)
matriz_numerica_ejemplo
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    2    1    4    5
## [2,]    6    0    2    0   10
## [3,]   11    1    3    2   15
## [4,]   16    3    4    0   20
## [5,]    0    0    5    0    0

Dimensión

# nrow muestra el número de filas de la matriz
nrow(matriz_numerica_ejemplo)
## [1] 5
# ncol muestra el número de filas de la matriz
ncol(matriz_numerica_ejemplo)
## [1] 5
# dim muestra una lista con la dimensión de la matriz
dim(matriz_numerica_ejemplo) #entendiéndose como 5x5
## [1] 5 5
# length muestra el total de elementos de la matriz
length(matriz_numerica_ejemplo)
## [1] 25

Lista

vector_n <- 1:20
matriz_n <- matrix(data = 1:25, nrow = 5, byrow = T,)
vector_c <- c("a","b", "c")

mi_lista <- list(objeto_1 = matriz_n, objeto_2 = vector_c, objeto_3 = vector_n)

otra_lista <- list(lista = mi_lista, escalar = 50)

acceder a objeto 1 forma 1

otra_lista$lista
## $objeto_1
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    2    3    4    5
## [2,]    6    7    8    9   10
## [3,]   11   12   13   14   15
## [4,]   16   17   18   19   20
## [5,]   21   22   23   24   25
## 
## $objeto_2
## [1] "a" "b" "c"
## 
## $objeto_3
##  [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
otra_lista$lista$objeto_1
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    2    3    4    5
## [2,]    6    7    8    9   10
## [3,]   11   12   13   14   15
## [4,]   16   17   18   19   20
## [5,]   21   22   23   24   25

A veces las listas puede que no tengan etiquetas, por lo que es mejor referirse a la posición de los elementos dentro de la lista. forma 2

# Se utiliza el doble corchete
otra_lista[[1]]
## $objeto_1
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    2    3    4    5
## [2,]    6    7    8    9   10
## [3,]   11   12   13   14   15
## [4,]   16   17   18   19   20
## [5,]   21   22   23   24   25
## 
## $objeto_2
## [1] "a" "b" "c"
## 
## $objeto_3
##  [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
otra_lista[[1]] [[1]]
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    2    3    4    5
## [2,]    6    7    8    9   10
## [3,]   11   12   13   14   15
## [4,]   16   17   18   19   20
## [5,]   21   22   23   24   25
# Si queremos el elemento 7 dentro del objeto_1, entonces
otra_lista[[1]] [[1]] [2,2]
## [1] 7
# Si queremos los valores 13, 14, 18 y 19 dentro del objeto_1, entonces
otra_lista[[1]] [[1]] [3:4,3:4]
##      [,1] [,2]
## [1,]   13   14
## [2,]   18   19
# Cambiar los valores 13, 14, 18 y 19 dentro del objeto_1 por 0
otra_lista[[1]] [[1]] [3:4,3:4] <-0 
otra_lista[[1]] [[1]] [3:4,3:4]
##      [,1] [,2]
## [1,]    0    0
## [2,]    0    0
# Length nos permite ver el número de objetos dentro de la lista
length(mi_lista)
## [1] 3
# Para saber el tipo de dato del objeto, es necesario usar el doble corchete
class(mi_lista[2])
## [1] "list"
class(mi_lista[[2]])
## [1] "character"
# Para agregar otro elemento a la lista, entonces
otra_lista[[1]]
## $objeto_1
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    2    3    4    5
## [2,]    6    7    8    9   10
## [3,]   11   12    0    0   15
## [4,]   16   17    0    0   20
## [5,]   21   22   23   24   25
## 
## $objeto_2
## [1] "a" "b" "c"
## 
## $objeto_3
##  [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
length(otra_lista[[1]])
## [1] 3
length(otra_lista[[1]]) <- 4
length(otra_lista[[1]])
## [1] 4

modificar el cuarto objeto

otra_lista[[1]][[4]]
## NULL
otra_lista[[1]][[4]] <-c(4,7,8)
otra_lista[[1]][[4]]
## [1] 4 7 8
# Cambiar el nombre a un objeto, en este caso el cuarto objeto
names(otra_lista[[1]])
## [1] "objeto_1" "objeto_2" "objeto_3" ""
names(otra_lista[[1]])[4]
## [1] ""
names(otra_lista[[1]])[4] <- "objeto_4"
names(otra_lista[[1]])
## [1] "objeto_1" "objeto_2" "objeto_3" "objeto_4"
# Otro ejemplo de cambio de nombre
names(otra_lista)
## [1] "lista"   "escalar"
names(otra_lista) [1]
## [1] "lista"
names(otra_lista) [1] <- "listado"
names(otra_lista)
## [1] "listado" "escalar"
# Cambiar nombres simultáneamente
names(otra_lista[[1]])
## [1] "objeto_1" "objeto_2" "objeto_3" "objeto_4"
names(otra_lista[[1]]) [1:2]
## [1] "objeto_1" "objeto_2"
names(otra_lista[[1]]) [1:2] <- c("item_1","item_2")
names(otra_lista[[1]]) [1:2]
## [1] "item_1" "item_2"

Para agregar otro elemento, dentro de la primera lista, entonces

length(otra_lista)
## [1] 2
length(otra_lista) <-3
length(otra_lista)
## [1] 3
# Renombrando el tercer elemento
names(otra_lista)
## [1] "listado" "escalar" ""
names(otra_lista)[3]
## [1] ""
names(otra_lista)[3] <- "objeto_df"
names(otra_lista)[3]
## [1] "objeto_df"

cambio entre los objetos

otra_lista[[1]][[3]]
##  [1]  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
temporal_1 <- otra_lista[[1]][[3]]

otra_lista[[1]][[1]]
##      [,1] [,2] [,3] [,4] [,5]
## [1,]    1    2    3    4    5
## [2,]    6    7    8    9   10
## [3,]   11   12    0    0   15
## [4,]   16   17    0    0   20
## [5,]   21   22   23   24   25
temporal_2 <- otra_lista[[1]][[1]]

temporal_2 <-otra_lista[[1]][[3]]
temporal_1 <- otra_lista[[1]][[1]]

Dataframe

Se puede tomar como una colección de vectores. Las filas son casos y las columnas variables

# Creación manual del dataframe 
df <-  data.frame(variable1 =c(4,5,3), variable2 =c("a","b","c"), variable3 = c(T,F,T))
df 
# Otra forma de crear un df
vector1 <- c(4,5,6)
vector2 <- c("z","x","y")
vector3 <- c(T,T,T)
otro_df <- data.frame(var1=vector1, var2=vector2, var=vector3)
otro_df