← R EspañolChapter 07 of 13

Paquetes

## Objetivos de Aprendizaje - Instalar y cargar paquetes de R - Comprender el ecosistema de paquetes - Trabajar con paquetes de CRAN y GitHub - Dominar fundamentos de tidyverse ## Fundamentos de Paquetes ### ¿Qué es un Paquete? - Colección de funciones, datos y documentación de R - Extiende las capacidades de R - Distribuido vía CRAN, GitHub, Bioconductor ### Paquetes Instalados ```r # Listar todos los paquetes instalados installed.packages() # Verificar si paquete está instalado "ggplot2" %in% installed.packages() # Número de paquetes instalados nrow(installed.packages()) ``` ## Instalar Paquetes ### Desde CRAN ```r # Instalar paquete único install.packages("ggplot2") # Instalar múltiples paquetes install.packages(c("dplyr", "tidyr", "readr")) ``` ### Desde GitHub ```r # Necesitas devtools o remotes install.packages("remotes") # remotes::install_github("propietario/repo") remotes::install_github("tidyverse/dplyr") ``` ### Desde Bioconductor ```r # Los paquetes de Bioconductor necesitan instalación especial if (!require("BiocManager")) install.packages("BiocManager") BiocManager::install("DESeq2") ``` ### Instalar con Dependencias ```r # install.packages instala dependencias automáticamente install.packages("tidyverse") # Verificar dependencias tools::package_dependencies("ggplot2") ``` ## Cargar Paquetes ### library vs require ```r # library() lanza error si no se encuentra library(ggplot2) # require() retorna TRUE/FALSE, más suave if (!require(ggplot2)) { install.packages("ggplot2") library(ggplot2) } ``` ### Espacio de Nombres ```r # Usar :: para llamar sin cargar dplyr::filter(df, condicion) # ggplot2::ggplot # tidyr::pivot_longer ``` ### Detachar ```r # Descargar paquete detach("package:ggplot2", unload = TRUE) ``` ## Tidyverse ### Descripción General Tidyverse es una colección de paquetes de R para ciencia de datos. | Paquete | Propósito | |---------|-----------| | dplyr | Manipulación de datos | | tidyr | Organización de datos | | readr | Importación de datos | | ggplot2 | Visualización | | purrr | Programación funcional | | tibble | Dataframes modernos | | stringr | Manipulación de cadenas | | forcats | Manejo de factores | ### Instalar Tidyverse ```r # Instalar todos los paquetes tidyverse install.packages("tidyverse") # Cargar tidyverse library(tidyverse) ``` ## Paquete tibble ### Dataframes Modernos ```r # tibble es un dataframe moderno library(tibble) # Crear tibble tb <- tibble( nombre = c("Alicia", "Roberto"), edad = c(25, 30) ) class(tb) # "tbl_df" "tbl" "data.frame" # Imprimir (mejor formato) print(tb) tb ``` ### tribble - Tibble Fila por Fila ```r # Crear desde filas tb <- tribble( ~nombre, ~edad, ~puntuacion, "Alicia", 25, 95.5, "Roberto", 30, 87.3, "Carlos", 35, 92.1 ) ``` ### tibble vs data.frame ```r # tibble: no cambia tipos de variables df <- data.frame(x = 1:3, y = c("a", "b", "c")) str(df) # y se convierte a Factor tb <- tibble(x = 1:3, y = c("a", "b", "c")) str(tb) # y se mantiene como carácter # tibble: sin coincidencia parcial df <- data.frame(uno = 1) df$o # Funciona (parcial) tb <- tibble(uno = 1) # tb$o # Error # tibble: muestra dimensiones tb # # A tibble: 3 x 2 ``` ## Paquete readr ### Leer Datos ```r library(readr) # Leer CSV df <- read_csv("datos.csv") # Leer TSV df <- read_tsv("datos.tsv") # Leer delimitado df <- read_delim("datos.txt", delim = "|") ``` ### Escribir Datos ```r library(readr) # Escribir CSV write_csv(df, "salida.csv") # Escribir TSV write_tsv(df, "salida.tsv") ``` ### Opciones de Análisis ```r # Especificar tipos de columnas df <- read_csv("datos.csv", col_types = cols( nombre = col_character(), edad = col_integer(), puntuacion = col_double() )) # Omitir líneas df <- read_csv("datos.csv", skip = 2) # Sin encabezado df <- read_csv("datos.csv", col_names = FALSE) ``` ## Paquete tidyr ### Organización de Datos ```r library(tidyr) # Gather (ancho a largo) df <- data.frame( nombre = c("Alicia", "Roberto"), matematicas = c(90, 85), ciencias = c(95, 88) ) gather(df, materia, puntuacion, matematicas, ciencias) # nombre materia puntuacion # Alicia matematicas 90 # Roberto matematicas 85 # Alicia ciencias 95 # Roberto ciencias 88 # spread (largo a ancho) gather(df, materia, puntuacion, matematicas, ciencias) %>% spread(materia, puntuacion) ``` ### Funciones Pivot (Modernas) ```r library(tidyr) # Pivot longer (ancho a largo) df <- data.frame( nombre = c("Alicia", "Roberto"), matematicas = c(90, 85), ciencias = c(95, 88) ) pivot_longer(df, cols = c(matematicas, ciencias), names_to = "materia", values_to = "puntuacion") # Pivot wider (largo a ancho) pivot_wider(df, names_from = materia, values_from = puntuacion) ``` ### Separate y Unite ```r # Columna separada df <- data.frame( nombre = c("Alicia Smith", "Roberto Jones"), edad = c(25, 30) ) separate(df, nombre, into = c("nombre", "apellido"), sep = " ") # nombre apellido edad # 1 Alicia Smith 25 # 2 Roberto Jones 30 # Unir columnas unite(df, "nombre_completo", nombre, apellido, sep = " ") # nombre_completo edad # 1 Alicia Smith 25 # 2 Roberto Jones 30 ``` ### Manejar Valores Faltantes ```r # Eliminar filas con cualquier NA drop_na(df) # Eliminar filas con NA en columnas específicas drop_na(df, edad) # Llenar NA con valor fill(df, nombre_columna) # Llenar NA con valor anterior fill(df, nombre_columna, .direction = "up") # Reemplazar NA con valor específico replace_na(df, list(nombre_columna = 0)) ``` ## Paquete dplyr ### Funciones Principales ```r library(dplyr) # select - elegir columnas select(df, nombre, edad) select(df, -puntuacion) # Excluir # filter - elegir filas filter(df, edad > 25) filter(df, edad > 25 & puntuacion < 90) # mutate - agregar/modificar columnas mutate(df, promedio = (matematicas + ciencias) / 2) mutate(df, calificacion = ifelse(puntuacion >= 90, "A", "B")) # summarize - agregar summarize(df, edad_media = mean(edad)) summarize(df, n = n()) # Contar filas # arrange - ordenar arrange(df, edad) arrange(df, desc(edad)) ``` ### Encadenamiento ```r # Operador pipe %>% df %>% filter(edad > 25) %>% select(nombre, edad) %>% arrange(edad) ``` ### group_by ```r df <- data.frame( grupo = c("A", "A", "B", "B"), valor = c(10, 20, 30, 40) ) df %>% group_by(grupo) %>% summarize(media = mean(valor), suma = sum(valor), n = n()) ``` ## Paquete stringr ### Operaciones con Cadenas ```r library(stringr) # Longitud str_length(c("manzana", "plátano")) # 5 6 # Mayúsculas/minúsculas str_to_upper("hola") # "HOLA" str_to_lower("HOLA") # "hola" str_to_title("hola mundo") # "Hola Mundo" # Recortar str_trim(" hola ") # "hola" ``` ### Coincidencia de Patrones ```r # Detectar patrón str_detect(c("manzana", "plátano"), "an") # FALSE TRUE # Extraer coincidencias str_extract("abc123def", "[0-9]+") # "123" # Reemplazar str_replace("manzana", "p", "z") # "manzana" str_replace_all("plátano", "a", "o") # "plátono" # Dividir str_split("a-b-c", "-") # list("a", "b", "c") ``` ### Combinar ```r # Concatenar str_c("Hola", "Mundo") # "HolaMundo" str_c("Hola", "Mundo", sep = " ") # "Hola Mundo" # Unir vector str_c(c("a", "b"), collapse = "-") # "a-b" ``` ## Paquete forcats ### Operaciones con Factores ```r library(forcats) # Cambiar orden f <- factor(c("pequeño", "grande", "mediano")) fct_relevel(f, "pequeño", "mediano", "grande") # Invertir fct_rev(f) # Reordenar por frecuencia f <- factor(c("b", "a", "b", "c", "a")) fct_infreq(f) # b a c (por frecuencia) # Agrupar (valores raros) f <- factor(c("a", "a", "a", "b", "c")) fct_lump(f, n = 2) # a b Other ``` ## Actualizar Paquetes ### Actualizar Todo ```r # Actualizar todos los paquetes update.packages() # Actualizar paquete específico install.packages("dplyr") ``` ### Verificar Versiones ```r # Versión del paquete packageVersion("dplyr") # Versión de R R.version.string ``` ## Resumen - Los paquetes extienden la funcionalidad de R - `install.packages()` desde CRAN, `remotes::install_github()` desde GitHub - `library()` carga paquete, `detach()` descarga - Tidyverse es una colección coherente de paquetes para ciencia de datos - tibble es un dataframe moderno y más estricto - dplyr proporciona gramática de manipulación de datos - tidyr para organización de datos (gather, spread, pivot) - stringr para manipulación de cadenas - forcats para manejo de factores - Mantener paquetes actualizados con `update.packages()`

Comments

Comments powered by Giscus

To enable comments, add your Giscus embed code here.

Learn more about Giscus →