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 →