# ======================================================== # # SESIÓN 5: Tema 5: Manipulación y transformación de datos # # ======================================================== # pescadores <- data.frame( id = 1:10, nombre = c("Juan", "Pedro", "Luis", "Carlos", "Miguel", "Ana", "Rosa", "Jorge", "Elena", "Diego"), zona = c("Norte", "Sur", "Norte", "Centro", "Sur", "Norte", "Centro", "Sur", "Norte", "Centro"), captura_kg = c(120, 80, 150, 60, 100, 90, 110, 70, 130, 95), sexo = c("M", "M", "M", "M", "M", "F", "F", "M", "F", "M"), ingresos = c(600, 400, 750, 300, 500, 450, 550, 350, 650, 480) ) # Ver base pescadores # -------------------------- # 1. Crear una Variable ---- # -------------------------- pescadores$ingresos1 <- pescadores$ingresos * 3.45 pescadores$ingresos2 <- with(pescadores, ingresos * 3.50) pescadores$ingresos_diario <- pescadores$ingresos1 / 30 # ------------------------------ # 2. Etiquetar una variable ---- # ------------------------------ install.packages("Hmisc") library(Hmisc) # Etiquetar variable library(Hmisc) label(pescadores$id) <- "Código de identificación" label(pescadores$nombre) <- "Nombre del Pescador" label(pescadores$sexo) <- "Sexo del Pescador" label(pescadores$captura_kg) <- "Volumen de Captura en Kg" label(pescadores$zona) <- "Zona de captura" label(pescadores$ingresos) <- "Ingresos en Dólares" label(pescadores$ingresos1) <- "Ingresos en Soles" # ------------------------------ # 3. Renombrar una variable ---- # ------------------------------ install.packages("reshape") library(reshape) pescadores<-rename(pescadores,c(captura_kg="captura_tn")) pescadores<-rename(pescadores,c(sexo="P004")) label(pescadores$captura_tn) <- "Volumen de Captura en Tn" # --------------------------- # 4. Recodificación ---- # --------------------------- pescadores$nivel[pescadores$captura_tn<100]="Bajo" pescadores$nivel[pescadores$captura_tn>=100 & pescadores$captura_tn<=120]="Medio" pescadores$nivel[pescadores$captura_tn>120]="Alto" table(pescadores$nivel) # -------------------------- # 5. Ordenar datos ---- # -------------------------- pescadores_2<- pescadores[order(-pescadores$captura_tn),] pescadores_3 <- pescadores[order(pescadores$zona, -pescadores$captura_tn), ] pescadores_4 <- pescadores[order(pescadores$zona, decreasing = TRUE, -pescadores$captura_tn), ] # ------------------------------- # 6. Unión de Bases de Datos ---- # ------------------------------- # Base 1: Información de pescadores base1 <- data.frame( id = 1:5, nombre = c("Juan", "Pedro", "Luis", "Carlos", "Miguel"), embarcacion = c("Bote", "Lancha", "Bote", "Lancha", "Bote") ) # Base 2: Producción base2 <- data.frame( id = c(1,2,3,4,5), produccion_kg = c(120, 80, 150, 60, 100), ingresos = c(600, 400, 750, 300, 500) ) # Unión horizontal (merge) base_unida <- merge(base1, base2, by = "id") # Ver resultado base_unida # Unión vertical (rbind) # Crear otra base similar base3 <- data.frame( id = 6:10, nombre = c("Jose", "Rosa","Hector","Javier","Sofia"), embarcacion = c("Bote", "Lancha","Bote","Bote","Lancha") ) # Combinar base3$produccion_kg <- NA base3$ingresos <- NA base_total2 <- rbind(base_unida,base3) # ------------------------- # BASES ADICIONALES (INSUMOS) # ------------------------- # Base A: Ventas diarias ventas <- data.frame( id = 1:5, dia = c("Lunes", "Martes", "Miercoles", "Jueves", "Viernes"), ventas_soles = c(200, 150, 300, 250, 180) ) # Base B: Costos costos <- data.frame( id = 1:5, combustible = c(50, 40, 60, 55, 45), hielo = c(20, 15, 25, 20, 18) ) # Base C: Características del pescador caracteristicas <- data.frame( id = 1:5, edad = c(45, 38, 50, 29, 41), experiencia_anios = c(20, 15, 25, 8, 18) ) base_completa1 <- merge(ventas, costos, by = "id") base_completa2 <- merge(base_completa1, caracteristicas, by = "id") # ------------------------------ # 7. Paquetes dplyr y tidyr ---- # ------------------------------ # Instalar (solo la primera vez) install.packages("dplyr") install.packages("tidyr") # Cargar librerías library(dplyr) library(tidyr) # ------------------------------ # Base de ejemplo # ------------------------------ agricultores <- data.frame( id = 1:5, nombre = c("Juan", "Pedro", "Luis", "Carlos", "Miguel"), zona = c("Norte", "Sur", "Norte", "Centro", "Sur"), captura_kg = c(120, 80, 150, 60, 100), ingresos = c(600, 400, 750, 300, 500) ) # ============================== # 🔹 dplyr: manipulación de datos # ============================== # 1. select(): seleccionar variables agricultores %>% select(nombre, ingresos,captura_kg) select(agricultores, nombre, captura_kg) # 2. filter(): filtrar datos agricultores %>% filter(captura_kg < 100) filter(agricultores,captura_kg > 100) # 3. mutate(): crear nuevas variables agricultores %>% mutate(ingreso_dia = ingresos / 30) # 4. arrange(): ordenar datos agricultores %>% arrange(desc(captura_kg)) # 5. summarise(): resumir información agricultores %>% summarise(promedio = mean(captura_kg)) # 6. group_by() + summarise(): resumen por grupo agricultores %>% group_by(zona) %>% summarise(promedio_captura = mean(captura_kg)) # ============================== # 🔹 tidyr: organización de datos # ============================== # Base en formato ancho (wide) ventas <- data.frame( id = 1:5, enero = c(100, 200, 150, 300, 450), febrero = c(120, 180, 160, 200, 230) ) # 1. pivot_longer(): de ancho a largo ventas_long <- ventas %>% pivot_longer(cols = enero:febrero, names_to = "mes", values_to = "ventas") ventas_long # 2. pivot_wider(): de largo a ancho ventas_wide <- ventas_long %>% pivot_wider(names_from = mes, values_from = ventas) ventas_wide # 3. separate(): separar una columna datos <- data.frame( info = c("Juan-Norte", "Pedro-Sur", "Luis-Centro") ) datos %>% separate(info, into = c("nombre", "zona"), sep = "-") # 4. unite(): unir columnas agricultores %>% unite("id_nombre", id, nombre, sep = "_")