Introducción a R

Guía de referencia rápida

Autor/a

René Canales

Fecha de publicación

1 de enero de 2026


R y RStudio

R es el lenguaje. RStudio es la interfaz. Necesitas instalar ambos.

Descargar R cran.r-project.org
Descargar RStudio posit.co/download/rstudio-desktop

Instala R antes que RStudio.

Los 4 paneles de RStudio

Panel Función
① Script Escribes y guardas tu código
② Consola Donde se ejecuta el código
③ Environment Objetos activos en memoria
④ Files / Plots / Help Archivos, gráficos y ayuda

Objetos y asignación

# <- asigna un valor a un nombre
edad   <- 25
nombre <- "René"
activo <- TRUE

class(edad)     # "numeric"
class(nombre)   # "character"
class(activo)   # "logical"

Puedes usar = en vez de <-, pero la convención en R es <-.

Tipos de datos

Tipo Ejemplo Uso
numeric 3.14 Números con decimales
integer 42L Números enteros
character "hola" Texto, siempre entre comillas
logical TRUE / FALSE Verdadero o falso
factor factor("alto") Categorías
NA NA Valor faltante

Un número guardado como character ("25") no se puede operar matemáticamente. Usa class() para verificar el tipo antes de operar.


Vectores

Secuencia de elementos del mismo tipo, creada con c().

edades <- c(23, 31, 28, 25, 19)

edades[1]       # 23  ← los índices parten en 1, no en 0
edades[2:4]     # 31 28 25
mean(edades)    # promedio → 25.2
length(edades)  # cantidad de elementos → 5

En R los índices parten en 1. edades[1] es el primer elemento (no el segundo como en Python).


Data Frames

Tabla donde cada columna es una variable y cada fila es una observación.

estudiantes <- data.frame(
  nombre = c("Ana", "Luis", "María", "Pedro"),
  edad   = c(23, 31, 28, 25),
  nota   = c(6.5, 5.8, 6.9, 6.1)
)

head(estudiantes)     # primeras filas
str(estudiantes)      # estructura y tipos de cada columna
summary(estudiantes)  # estadísticas descriptivas

Acceder a datos

estudiantes$nota           # columna por nombre
estudiantes[1, ]           # fila 1 completa
estudiantes[2, 3]          # fila 2, columna 3

# Filtrar filas con condición
estudiantes[estudiantes$nota >= 6.5, ]

$ es la forma más común de acceder a columnas: df$columna. La coma en [fila, columna] es obligatoria — si la omites, R interpretará el número como columna, no como fila.


Importar datos

# CSV estándar (separado por coma)
datos <- read.csv("archivo.csv")

# CSV con punto y coma (común en LatAm y Europa)
datos <- read.csv2("archivo.csv")

# Excel
library(readxl)
datos <- read_excel("archivo.xlsx")

Usa Proyectos de RStudio (File → New Project). Fija automáticamente la carpeta de trabajo y evita errores del tipo “archivo no encontrado”.


Paquetes

install.packages("tidyverse")  # instalar (solo una vez)
library(tidyverse)             # cargar (cada sesión)

install.packages() se ejecuta una sola vez. library() debe ejecutarse cada vez que abres RStudio.

Paquetes recomendados para empezar

Paquete Para qué sirve
tidyverse Manipulación y visualización de datos
readxl Leer archivos Excel
janitor Limpiar nombres de columnas y datos
skimr Resúmenes estadísticos rápidos

Recodificar variables

recode() — para valores exactos

Renombra valores específicos de una variable.

library(dplyr)

estudiantes <- estudiantes |>
  mutate(
    nivel = recode(nota,
      "6.5" = "Bueno",
      "5.8" = "Regular",
      "6.9" = "Excelente"
    )
  )

recode() siempre va dentro de mutate(). mutate() es la función que crea o modifica columnas.

case_when() — para condiciones y rangos

Más flexible: permite crear categorías basadas en condiciones lógicas.

estudiantes <- estudiantes |>
  mutate(
    categoria = case_when(
      nota >= 6.5              ~ "Distinción",
      nota >= 5.0 & nota < 6.5 ~ "Aprobado",
      nota < 5.0               ~ "Reprobado"
    )
  )

Las condiciones se evalúan en orden de arriba hacia abajo: la primera que se cumple gana. Si una fila ya fue clasificada, las siguientes condiciones no se evalúan para esa fila.


Principales paquetes en R

Una orientación de los paquetes más usados en análisis de datos, organizados por lo que necesitas hacer.

Importar datos

Paquete Para qué sirve Función clave
readxl Leer archivos Excel .xlsx / .xls read_excel()
haven Leer archivos SPSS, Stata, SAS read_sav(), read_dta()
readr Leer CSV de forma más rápida y robusta read_csv()
jsonlite Leer y escribir archivos JSON fromJSON()

readr (parte del tidyverse) es más rápido y predecible que read.csv() base. Úsalo cuando trabajes con archivos grandes.

Manipular y limpiar datos

Paquete Para qué sirve Funciones clave
dplyr Filtrar, seleccionar, resumir, crear columnas filter() select() mutate() summarise() group_by()
tidyr Transformar entre formato ancho y largo pivot_longer() pivot_wider()
janitor Limpiar nombres de columnas y datos sucios clean_names() tabyl()
stringr Manipular texto y cadenas de caracteres str_detect() str_replace()
forcats Manipular factores y variables categóricas fct_relevel() fct_recode()
lubridate Trabajar con fechas y horas ymd() dmy() year() month()

dplyr, tidyr, stringr, forcats y lubridate son todos parte del tidyverse. Instalando tidyverse los obtienes todos de una vez.

clean_names() de janitor convierte nombres como "Nombre Alumno" o "NOTA.FINAL" a nombre_alumno y nota_final. Úsalo siempre al importar datos de Excel.

Explorar y describir datos

Paquete Para qué sirve Función clave
skimr Resumen estadístico rápido y legible skim()
DataExplorer Reporte automático de exploración create_report()
corrr Matrices de correlación ordenadas correlate()

skim() es el reemplazo moderno de summary(). Muestra histogramas en consola, conteo de NA, y estadísticos por tipo de variable.

Visualizar datos

Paquete Para qué sirve Función clave
ggplot2 Visualización declarativa y flexible ggplot() + geom_*()
ggpubr Gráficos listos para publicación ggboxplot() ggbarplot()
patchwork Combinar múltiples gráficos de ggplot2 p1 + p2 / p1 / p2
scales Formatear ejes (%, $, miles) label_percent() label_comma()
plotly Gráficos interactivos desde ggplot2 ggplotly()

La lógica de ggplot2 es por capas: primero defines los datos, luego la geometría, luego los ajustes estéticos. Al principio parece raro, pero es muy poderoso una vez que lo internalizas.

Análisis estadístico

Paquete Para qué sirve Función clave
stats Estadística base (ya viene con R) lm() t.test() cor()
broom Convertir resultados de modelos en data frames tidy() glance()
psych Estadística aplicada a ciencias sociales describe() alpha()
lme4 Modelos mixtos y multinivel lmer() glmer()

broom::tidy() transforma la salida de lm() o t.test() en una tabla limpia que puedes exportar directamente a Excel o usar en un gráfico.

Reportes y documentos

Paquete Para qué sirve
quarto Documentos, presentaciones y sitios web reproducibles
knitr Integrar código R en documentos
kableExtra Tablas HTML y PDF con formato avanzado
officer Exportar a Word y PowerPoint desde R
openxlsx Crear y escribir archivos Excel con formato

Todo lo que ves en este handout fue generado con Quarto. Es el estándar actual para investigación reproducible en R.


Guía de funciones

R base

Funciones disponibles sin instalar nada. Son el vocabulario fundamental de R.

Objetos y tipos

Función Qué hace Ejemplo
class(x) Tipo de un objeto class(3.14)"numeric"
typeof(x) Tipo interno más específico typeof(TRUE)"logical"
is.numeric(x) ¿Es numérico? is.numeric("hola")FALSE
is.character(x) ¿Es texto? is.character("hola")TRUE
is.na(x) ¿Es valor faltante? is.na(NA)TRUE
as.numeric(x) Convertir a numérico as.numeric("25")25
as.character(x) Convertir a texto as.character(100)"100"
as.factor(x) Convertir a factor as.factor("alto")

Vectores y operaciones

Función Qué hace Ejemplo
c(...) Crear un vector c(1, 2, 3)
length(x) Cantidad de elementos length(c(1,2,3))3
sum(x) Suma sum(c(1,2,3))6
mean(x) Promedio mean(c(2,4,6))4
median(x) Mediana median(c(1,2,10))2
sd(x) Desviación estándar sd(c(2,4,6))
min(x) / max(x) Mínimo / máximo min(c(3,1,2))1
range(x) Rango (mín y máx) range(c(1,5,3))1 5
sort(x) Ordenar de menor a mayor sort(c(3,1,2))1 2 3
rev(x) Invertir el orden rev(c(1,2,3))3 2 1
unique(x) Valores únicos unique(c(1,1,2))1 2
table(x) Frecuencias de cada valor table(c("a","b","a"))
seq(a, b, by) Secuencia de números seq(1, 10, by=2)1 3 5 7 9
rep(x, n) Repetir un valor rep(0, 3)0 0 0

Data frames

Función Qué hace Ejemplo
data.frame(...) Crear un data frame data.frame(a=1:3, b=c("x","y","z"))
head(df, n) Primeras n filas (def. 6) head(df, 10)
tail(df, n) Últimas n filas tail(df, 5)
str(df) Estructura y tipos de columnas str(estudiantes)
summary(df) Estadísticas descriptivas summary(estudiantes)
dim(df) Dimensiones (filas, columnas) dim(df)100 5
nrow(df) / ncol(df) N° filas / columnas nrow(df)100
colnames(df) Nombres de columnas colnames(df)
subset(df, cond) Filtrar filas subset(df, nota >= 6)

Utilidades generales

Función Qué hace Ejemplo
ls() Listar objetos en memoria ls()
rm(x) Eliminar un objeto rm(datos_viejos)
getwd() Ver carpeta de trabajo actual getwd()
setwd() Cambiar carpeta de trabajo setwd("C:/mi_proyecto")
install.packages() Instalar un paquete install.packages("dplyr")
library() Cargar un paquete library(dplyr)
help(f) / ?f Abrir documentación ?mean
paste(...) Unir texto paste("Hola", "mundo")"Hola mundo"
paste0(...) Unir texto sin separador paste0("R", "2024")"R2024"
nchar(x) Largo de una cadena de texto nchar("hola")4
print(x) Imprimir un objeto print(resultado)
round(x, n) Redondear a n decimales round(3.14159, 2)3.14

?función abre la documentación directamente en RStudio. Es la forma más rápida de entender qué argumentos acepta una función.


dplyr — manipulación de datos

library(dplyr)
Función Qué hace Ejemplo
filter(df, cond) Filtrar filas por condición filter(df, nota >= 6)
select(df, cols) Seleccionar columnas select(df, nombre, nota)
mutate(df, ...) Crear o modificar columnas mutate(df, aprobado = nota >= 5)
rename(df, nuevo=viejo) Renombrar columna rename(df, puntaje = nota)
arrange(df, col) Ordenar filas arrange(df, desc(nota))
summarise(df, ...) Resumir en una fila summarise(df, promedio = mean(nota))
group_by(df, col) Agrupar para resumir group_by(df, curso)
count(df, col) Contar valores por grupo count(df, categoria)
distinct(df, col) Filas únicas distinct(df, nombre)
slice(df, n) Seleccionar filas por posición slice(df, 1:5)
pull(df, col) Extraer columna como vector pull(df, nota)
recode(x, ...) Recodificar valores exactos recode(x, "a" = "A")
case_when(...) Recodificar con condiciones ver sección anterior
left_join(x, y) Unir dos tablas por columna común left_join(df1, df2, by="id")

El operador |> (pipe) encadena funciones: df |> filter(...) |> mutate(...) |> summarise(...). Lee de izquierda a derecha: “toma df, luego filtra, luego modifica, luego resume”.


tidyr — reshaping de datos

library(tidyr)
Función Qué hace Ejemplo
pivot_longer(df, cols) De ancho a largo (una columna por año → una columna “año”) pivot_longer(df, cols=2:5, names_to="año", values_to="valor")
pivot_wider(df, ...) De largo a ancho pivot_wider(df, names_from=año, values_from=valor)
drop_na(df) Eliminar filas con NA drop_na(df)
replace_na(df, list) Reemplazar NA por un valor replace_na(df, list(nota=0))
separate(df, col, into) Separar una columna en varias separate(df, fecha, into=c("año","mes","día"))
unite(df, col, ...) Unir varias columnas en una unite(df, "nombre_completo", nombre, apellido)

pivot_longer() y pivot_wider() reemplazan a las antiguas gather() y spread(). Si ves código viejo con esas funciones, usa las nuevas versiones.


ggplot2 — visualización

library(ggplot2)

La lógica es por capas: ggplot(datos, aes(...)) + geom_*() + ajustes opcionales.

Función Qué hace
ggplot(df, aes(x, y)) Iniciar un gráfico
geom_point() Gráfico de puntos (dispersión)
geom_line() Gráfico de líneas
geom_bar() Gráfico de barras (frecuencias)
geom_col() Gráfico de barras (valores)
geom_histogram() Histograma
geom_boxplot() Diagrama de caja
geom_density() Curva de densidad
facet_wrap(~var) Dividir en paneles por variable
labs(title, x, y) Etiquetas del gráfico
theme_minimal() Tema visual limpio
scale_x_log10() Escala logarítmica en X
# Ejemplo completo
ggplot(estudiantes, aes(x = edad, y = nota)) +
  geom_point(color = "steelblue", size = 3) +
  labs(title = "Nota según edad", x = "Edad", y = "Nota") +
  theme_minimal()

aes() mapea variables del data frame a propiedades visuales: aes(x=edad, y=nota, color=categoria). Todo lo que varía según los datos va dentro de aes().


janitor — limpieza de datos

library(janitor)
Función Qué hace Ejemplo
clean_names(df) Estandariza nombres de columnas a snake_case clean_names(df)
tabyl(df, col) Tabla de frecuencias con porcentajes tabyl(df, categoria)
remove_empty(df) Elimina filas y columnas completamente vacías remove_empty(df, "rows")
get_dupes(df, col) Muestra filas duplicadas get_dupes(df, rut)
adorn_totals() Agrega fila/columna de totales a una tabla tabyl(df, cat) |> adorn_totals()
adorn_pct_formatting() Formatea porcentajes en una tabla tabyl(df, cat) |> adorn_pct_formatting()

clean_names() es casi siempre el primer paso al importar datos de Excel. Convierte "Nombre Alumno", "NOTA FINAL" o "Año.Ingreso" a nombre_alumno, nota_final, ano_ingreso.


skimr — exploración rápida

library(skimr)
Función Qué hace
skim(df) Resumen completo: tipo, NAs, distribución por columna
skim(df, col1, col2) Resumen solo de columnas seleccionadas
yank(skim_df, "numeric") Extraer solo las estadísticas numéricas

skim() muestra mini-histogramas en consola para variables numéricas. De un vistazo puedes ver si hay valores atípicos, NAs o distribuciones raras en tus datos.


readxl y haven — importar datos

library(readxl)
library(haven)
Función Paquete Qué hace
read_excel(path) readxl Leer Excel (.xlsx / .xls)
read_excel(path, sheet=2) readxl Leer una hoja específica
read_excel(path, skip=2) readxl Saltar filas al inicio
excel_sheets(path) readxl Ver nombres de hojas disponibles
read_sav(path) haven Leer archivo SPSS (.sav)
read_dta(path) haven Leer archivo Stata (.dta)
read_sas(path) haven Leer archivo SAS
as_factor(x) haven Convertir etiquetas SPSS a factores

Al importar desde SPSS con haven, las variables categóricas vienen como labelled. Usa as_factor() para convertirlas a factores antes de analizarlas.