# 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_cadena2Para verificar el tipo de dato se utiliza el comando “class”
class(un_valor_logico)## [1] "logical"
class(un_entero)## [1] "integer"
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"
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
“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,5matriz_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
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
# 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
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]]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