← R EspañolChapter 02 of 13

Variables y Tipos de Datos

## Objetivos de Aprendizaje - Declarar y trabajar con variables - Comprender los tipos de datos atómicos de R - Dominar vectores y operaciones con vectores - Trabajar con matrices y dataframes - Comprender conversión de tipos ## Variables ### Asignación ```r # Usando operador de asignación (preferido) x <- 10 nombre <- "Alicia" es_valido <- TRUE # Usando signo igual y = 20 # Imprimir valor x print(x) ``` ### Reglas de Nomenclatura - Empezar con letra o punto (no dígito) - Puede contener letras, números, guiones bajos, puntos - Distingue mayúsculas de minúsculas - No usar palabras reservadas ```r # Nombres de variables válidos mi_var <- 5 miVar <- 5 MI_VAR <- 5 .mivar <- 5 # Empezar con punto es válido mivar2 <- 5 # Palabras reservadas a evitar # if, else, for, while, function, TRUE, FALSE, NULL ``` ## Tipos de Datos Atómicos ### Numérico ```r # Doble precisión (por defecto) x <- 3.14 class(x) # "numeric" # Entero (con sufijo L) y <- 5L class(y) # "integer" # Verificar tipo is.numeric(x) # TRUE is.integer(y) # FALSE para 5L (es entero) is.integer(5) # FALSE (5 es numérico por defecto) ``` ### Carácter (Cadenas) ```r # Asignación de cadena nombre <- "Alicia" saludo <- 'Hola' # Verificar tipo class(nombre) # "character" is.character(nombre) # TRUE ``` ### Lógico (Booleano) ```r # Valores lógicos (mayúsculas) es_activo <- TRUE tiene_permiso <- FALSE # También se puede usar T y F (pero evitar en scripts) es_valido <- T es_invalido <- F # Verificar tipo class(es_activo) # "logical" is.logical(es_activo) # TRUE ``` ### Valores Especiales ```r # NULL - ausencia de valor x <- NULL is.null(x) # TRUE # NA - valor faltante x <- NA is.na(x) # TRUE # NaN - no es un número x <- 0 / 0 is.nan(x) # TRUE # Inf - infinito x <- 1 / 0 is.infinite(x) # TRUE # Verificar NA específicamente x <- c(1, 2, NA, 4) is.na(x) # FALSE FALSE TRUE FALSE ``` ## Vectores ### Crear Vectores ```r # Usando función c() (combinar) nums <- c(1, 2, 3, 4, 5) letras <- c("a", "b", "c") # Usando operador dos puntos 1:5 # c(1, 2, 3, 4, 5) # Usando seq() seq(1, 10, by = 2) # 1, 3, 5, 7, 9 seq(1, 10, length.out = 5) # 1, 3.25, 5.5, 7.75, 10 # Usando rep() rep(1, 5) # c(1, 1, 1, 1, 1) rep(c(1, 2), 3) # c(1, 2, 1, 2, 1, 2) rep(c(1, 2), each = 3) # c(1, 1, 1, 2, 2, 2) ``` ### Operaciones con Vectores ```r # Operaciones aritméticas (elemento a elemento) c(1, 2, 3) + c(4, 5, 6) # c(5, 7, 9) c(1, 2, 3) * 2 # c(2, 4, 6) # Reciclado (vector más corto se recicla) c(1, 2) + c(10, 20, 30, 40) # Warning: longer object length not multiple of shorter # Comparación c(1, 2, 3) > 2 # FALSE FALSE TRUE c(1, 2, 3) == 2 # FALSE TRUE FALSE ``` ### Indexación de Vectores ```r vec <- c(10, 20, 30, 40, 50) # Por posición (1-indexado) vec[1] # Primer elemento: 10 vec[3] # Tercer elemento: 30 vec[1:3] # Primeros tres: 10, 20, 30 # Indexación negativa (excluir) vec[-1] # Todos excepto el primero: 20, 30, 40, 50 vec[-c(1, 3)] # Excluir 1ro y 3ro: 20, 40, 50 # Indexación lógica vec[vec > 25] # Elementos > 25: 30, 40, 50 # Por nombre named_vec <- c(a = 1, b = 2, c = 3) named_vec["a"] # 1 ``` ### Funciones de Vectores ```r vec <- c(3, 1, 4, 1, 5, 9, 2, 6) length(vec) # 8 sum(vec) # Suma: 31 prod(vec) # Producto mean(vec) # Media: 3.875 sd(vec) # Desviación estándar var(vec) # Varianza # Ordenar sort(vec) # Ascendente sort(vec, decreasing = TRUE) # Descendente # Valores únicos unique(c(1, 2, 2, 3, 3, 3)) # 1, 2, 3 # Contar ocurrencias table(c("a", "b", "a", "c", "a")) # a b c # 3 1 1 ``` ## Matrices ### Crear Matrices ```r # Por enlace de fila/columna fila1 <- c(1, 2, 3) fila2 <- c(4, 5, 6) mat <- rbind(fila1, fila2) # matriz 2x3 mat2 <- cbind(c(1, 2), c(3, 4), c(5, 6)) # matriz 2x3 # Usando matrix() mat <- matrix(1:6, nrow = 2, ncol = 3) mat <- matrix(1:6, nrow = 2, ncol = 3, byrow = TRUE) ``` ### Operaciones con Matrices ```r mat <- matrix(1:4, nrow = 2) mat2 <- matrix(5:8, nrow = 2) # Elemento a elemento mat + mat2 mat * mat2 # Multiplicación elemento a elemento # Multiplicación de matrices (%*%) mat %*% t(mat2) # Transponer t(mat) # Dimensiones nrow(mat) ncol(mat) dim(mat) ``` ### Indexación de Matrices ```r mat <- matrix(1:9, nrow = 3) mat[1, 2] # Fila 1, Columna 2 mat[1, ] # Toda la primera fila mat[, 2] # Toda la segunda columna mat[1:2, 2:3] # Submatriz ``` ## Listas ### Crear Listas ```r # Crear una lista con diferentes tipos mi_lista <- list( nombre = "Alicia", edad = 30, puntuaciones = c(95, 87, 92), es_estudiante = TRUE ) # Lista vacía lista_vacia <- list() ``` ### Operaciones con Listas ```r mi_lista <- list(nombre = "Alicia", edad = 30) # Acceso por nombre mi_lista$nombre # "Alicia" mi_lista[["nombre"]] # "Alicia" # Acceso por índice mi_lista[[1]] # "Alicia" # Obtener todos los nombres names(mi_lista) # "nombre" "edad" ``` ### Convertir Lista a Vector ```r # Unlist aplana a vector unlist(list(1, 2, 3)) # c(1, 2, 3) ``` ## Dataframes ### Crear Dataframes ```r # Crear desde vectores df <- data.frame( nombre = c("Alicia", "Roberto", "Carlos"), edad = c(25, 30, 35), puntuacion = c(95.5, 87.3, 92.1) ) # Verificar estructura str(df) # 'data.frame': 3 obs. de 3 variables # Ver View(df) head(df) tail(df) ``` ### Indexación de Dataframes ```r df <- data.frame( nombre = c("Alicia", "Roberto", "Carlos"), edad = c(25, 30, 35) ) # Por nombre de columna df$nombre # "Alicia" "Roberto" "Carlos" df[, "nombre"] # Igual # Por posición df[, 1] # Primera columna df[1, ] # Primera fila # Usando subset subset(df, edad > 25) ``` ## Conversión de Tipos ### Verificar Tipos ```r x <- 5 is.numeric(x) # TRUE is.integer(x) # FALSE is.character(x) # FALSE is.logical(x) # FALSE is.vector(x) # TRUE ``` ### Convertir Tipos ```r # A carácter as.character(5) # "5" as.character(TRUE) # "TRUE" # A numérico as.numeric("5") # 5 as.numeric("hola") # NA con advertencia as.numeric(TRUE) # 1 as.numeric(FALSE) # 0 # A entero as.integer(5.7) # 5 # A lógico as.logical(1) # TRUE as.logical(0) # FALSE as.logical("TRUE") # TRUE as.logical("FALSE") # FALSE # A factor as.factor(c("a", "b", "a")) # a b a # Levels: a b ``` ### Conversión Automática ```r # R convierte automáticamente durante operaciones c(1, "hola", TRUE) # "1" "hola" "TRUE" (todo carácter) 1 + "2" # 3 (carácter a numérico) ``` ## Resumen - Variables creadas con `<-` asignación - Tipos atómicos: numeric, character, logical, special (NULL, NA, NaN, Inf) - Vectores son 1-dimensionales, creados con `c()` - Matrices son 2-dimensionales con `matrix()` - Listas pueden contener tipos mixtos, accedidas con `$` o `[[]]` - Dataframes son tabulares, como hojas de cálculo - Usar funciones `as.*()` para conversión de tipos - R usa indexación basada en 1

Comments

Comments powered by Giscus

To enable comments, add your Giscus embed code here.

Learn more about Giscus →