2  Tipos de datos

#Primeros pasos

En R, hay varios tipos de datos básicos que puedes usar. Aquí hay una descripción de los tipos de datos más comunes.

2.1 Números

Los números pueden ser enteros o números decimales.

# Número entero
x <- 5
print(x)
[1] 5
# Número decimal
y <- 5.5
print(y)
[1] 5.5

2.2 Cadena de texto

Las cadenas de texto se representan usando comillas simples o dobles.

texto <- "Hola, mundo!"


print(texto)
[1] "Hola, mundo!"

2.3 Valores lógicos

Los valores lógicos (booleanos) pueden ser TRUE o FALSE. Los valores lógicos se usan comúnmente para realizar operaciones condicionales.

# Valores lógicos
verdadero <- TRUE
falso <- FALSE
print(verdadero)
[1] TRUE
print(falso)
[1] FALSE

2.4 Vectores

Un vector es una secuencia de datos del mismo tipo. Puedes crear vectores usando la función c().

# Vector numérico
numeros <- c(1, 2, 3, 4, 5)
print(numeros)
[1] 1 2 3 4 5
# Vector de caracteres
cadenas <- c("uno", "dos", "tres")
print(cadenas)
[1] "uno"  "dos"  "tres"
# Vector lógico
logicos <- c(TRUE, FALSE, TRUE)
print(logicos)
[1]  TRUE FALSE  TRUE
# Nuevo vector
# ¿Qué ocurre si en un mismo vector dejamos character y numeric?
combinado <- c(1,2,3,"cuatro", "cinco")

# El resultado es un vector de "character". 
combinado
[1] "1"      "2"      "3"      "cuatro" "cinco" 
# Confirmamos la clase del vector con la función `class()`
class(combinado)
[1] "character"
# A lo anterior se le ha llamado, "coerción"    

2.5 Coerción

En R, la coerción de vectores se refiere al proceso de conversión automática de los elementos de un vector a un tipo de datos común cuando los elementos originales son de tipos diferentes. Esto se hace para asegurar que todas las operaciones en los vectores se realicen de manera consistente y sin errores. R sigue una jerarquía específica de tipos de datos para realizar esta conversión.

Jerarquía de Coerción R tiene una jerarquía de tipos de datos que determina cómo se realiza la coerción. La jerarquía de coerción en R es la siguiente (de menor a mayor):

  1. Logical (Lógico): TRUE, FALSE
  2. Integer (Entero): Números enteros
  3. Numeric (Numérico o Double): Números reales
  4. Complex (Complejo): Números complejos
  5. Character (Carácter): Cadenas de texto
  6. List (Lista): Colecciones de elementos

Cuando se combinan elementos de diferentes tipos en un vector, R los convierte automáticamente al tipo de datos “más alto” en la jerarquía.

** lógico -> entero -> numérico -> cadena de texto (logical -> integer -> numeric -> character) **

2.5.1 1. Coerción de Logical a Integer

vec <- c(TRUE, FALSE, 1)
print(vec)  # Output: 1 0 1
[1] 1 0 1

En este ejemplo, TRUE se convierte a 1 y FALSE se convierte a 0.

2.5.2 2. Coerción de Integer a Numeric

vec <- c(1L, 2.5)
print(vec)  # Output: 1.0 2.5
[1] 1.0 2.5

El número entero 1L se convierte a 1.0 para coincidir con el número numérico 2.5.

2.5.3 3. Coerción de Numeric a Character

vec <- c(1.5, "a")
print(vec)  # Output: "1.5" "a"
[1] "1.5" "a"  

El número 1.5 se convierte a la cadena de texto “1.5”.

2.5.4 4. Coerción de diferentes tipos en una lista

vec <- list(1, "a", TRUE)
print(vec)  # Output: [[1]] 1 [[2]] "a" [[3]] TRUE
[[1]]
[1] 1

[[2]]
[1] "a"

[[3]]
[1] TRUE

En una lista, los elementos no se fuerzan a un tipo común; cada elemento puede mantener su tipo de datos original.

2.6 Coerción Explícita

Además de la coerción automática, R también permite realizar coerciones explícitas usando funciones específicas como as.numeric(), as.character(), as.integer(), etc.

Ejemplo de Coerción Explícita

vec <- c("1", "2", "3")
numeric_vec <- as.numeric(vec)
print(numeric_vec)  # Output: 1 2 3
[1] 1 2 3

Aquí, as.numeric(vec) convierte explícitamente el vector de caracteres vec en un vector numérico.

Notas Importantes

NA (Not Available): Durante la coerción, si algún elemento no puede convertirse correctamente, R genera un valor NA y generalmente emite una advertencia.

Factores: Cuando se trabaja con factores, coercionarlos a otros tipos puede requerir pasos adicionales, como primero convertir el factor a carácter antes de convertirlo a numérico.

Ejemplo

factor_vec <- factor(c("1", "2", "3"))
char_vec <- as.character(factor_vec)
numeric_vec <- as.numeric(char_vec)
print(numeric_vec)  # Output: 1 2 3
[1] 1 2 3

2.7 Manipular vectores

Puedes manipular vectores de varias maneras, incluyendo seleccionar elementos, sumar y restar elementos, y más.

# Selección del primer elemento
primer_elemento <- numeros[1]
print(primer_elemento)
[1] 1
# Selección de múltiples elementos
primeros_tres <- numeros[1:3]
print(primeros_tres)
[1] 1 2 3

2.7.1 Suma de vectores

# Suma de vectores
suma <- numeros + c(1, 1, 1, 1, 1)
print(suma)
[1] 2 3 4 5 6
# Producto de vectores
producto <- numeros * c(2, 2, 2, 2, 2)
print(producto)
[1]  2  4  6  8 10

2.7.2 Filtrar vectores

# Filtrar valores mayores que 2
mayores_que_dos <- numeros[numeros > 2]
print(mayores_que_dos)
[1] 3 4 5
# Filtrar valores iguales a TRUE
verdaderos <- logicos[logicos == TRUE]
print(verdaderos)
[1] TRUE TRUE

2.8 Lista

En R, una lista es una estructura de datos versátil que puede contener elementos de diferentes tipos, por ejemplo, vectores, matrices, data frames, e incluso otras listas. Esto la vuelve óptima para organizar y manipular datos heterogéneos.

Concepto de list()

Una lista en R se crea utilizando la función list(). A diferencia de los vectores, que deben contener elementos del mismo tipo, las listas pueden contener elementos de diferentes tipos. Cada elemento de una lista puede ser referenciado mediante índices o nombres.

Ejemplo de Creación de una Lista

lista1 <- list(
  numero = 1,
  nombre = "Juan",
  vector = c(1, 2, 3),
  matriz = matrix(1:4, nrow = 2),
  lista_anidada = list(a = 10, b = 20)
)


print(lista1)
$numero
[1] 1

$nombre
[1] "Juan"

$vector
[1] 1 2 3

$matriz
     [,1] [,2]
[1,]    1    3
[2,]    2    4

$lista_anidada
$lista_anidada$a
[1] 10

$lista_anidada$b
[1] 20

Acceso a Elementos de una Lista Puedes acceder a los elementos de una lista utilizando el operador de doble corchete [[ ]] o el operador de signo de dólar $.

Acceso por Índice

print(lista1[[1]])  # [1] 1
[1] 1
print(lista1[[3]])  # [1] 1 2 3
[1] 1 2 3

Acceso por nombre

print(lista1$nombre)  # [1] "Juan"
[1] "Juan"
print(lista1$vector)  # [1] 1 2 3
[1] 1 2 3

2.9 data.frame

Un data.frame en R es una estructura de datos fundamental y muy versátil que se utiliza para almacenar datos tabulares. Es similar a una tabla en una base de datos o una hoja de cálculo en Excel, donde cada columna puede contener un tipo diferente de datos (numéricos, caracteres, factores, etc.), pero todos los elementos de una columna deben ser del mismo tipo.

Concepto de data.frame

Un data.frame es esencialmente una lista de vectores de igual longitud, donde cada vector representa una columna de datos y cada elemento dentro del vector representa una fila. Los data.frames son utilizados ampliamente en R para la manipulación y análisis de datos.

Creación de un data.frame

Puedes crear un data.frame utilizando la función data.frame().

# Crear un data frame simple
df <- data.frame(
  nombre = c("Ana", "Luis", "Marta", "Juan"),
  edad = c(23, 35, 29, 40),
  salario = c(50000, 60000, 70000, 80000)
)
print(df)
  nombre edad salario
1    Ana   23   50000
2   Luis   35   60000
3  Marta   29   70000
4   Juan   40   80000