En la gestión de bases de datos relacionales y el análisis
estructurado, la información suele encontrarse fragmentada en múltiples
tablas. El paquete dplyr proporciona dos
familias principales de funciones para combinar datos a través de llaves
comunes (keys):
inner_join,
left_join, right_join,
full_join): Combinan columnas de ambas tablas emparejando
filas según una coincidencia.semi_join,
anti_join): Filtran las filas de la primera tabla según la
presencia o ausencia de coincidencias en la segunda tabla (sin agregar
columnas nuevas).Para ilustrar de forma clara cada tipo de Join, crearemos dos datasets pequeños sobre estudiantes y cursos.
estudiantes: Contiene 5 alumnos. La
estudiante Sofía tiene un id_curso = 5 (que no
existe en la tabla de cursos).cursos: Contiene 4 materias. El curso
de Historia (id_curso = 4) no tiene ningún
estudiante matriculado.# Tabla Izquierda (x)
estudiantes <- tibble(
id_alumno = c(101, 102, 103, 104, 105),
nombre = c("Ana", "Carlos", "Elena", "David", "Sofía"),
id_curso = c(1, 2, 2, 3, 5)
)
# Tabla Derecha (y)
cursos <- tibble(
id_curso = c(1, 2, 3, 4),
nombre_curso = c("Matemáticas", "Programación", "Economía", "Historia"),
profesor = c("Dr. García", "Ing. López", "Dra. Martínez", "Lic. Fernández")
)inner_join() — Coincidencias ExactasMantiene únicamente las filas que tienen coincidencia en ambas tablas.
Regla: Retorna solo las filas donde
estudiantes$id_curso coincide con
cursos$id_curso.
Excluidos: Sofía (curso 5) e Historia (curso 4).
left_join() — Prioridad Tabla IzquierdaMantiene todas las filas de la tabla izquierda
(x). Si no hay coincidencia en la derecha
(y), los campos se rellenan con NA.
Regla: Conserva a todos los estudiantes. Sofía
permanece en el resultado pero muestra NA en el nombre del
curso y profesor.
right_join() — Prioridad Tabla DerechaMantiene todas las filas de la tabla derecha
(y). Si no hay coincidencia en la izquierda
(x), los campos del estudiante se rellenan con
NA.
Regla: Conserva todos los cursos. El curso
Historia aparece, pero con los datos de alumno como
NA.
A diferencia de los mutating joins, las uniones de filtrado nunca agregan nuevas columnas de la tabla derecha; solo filtran la tabla izquierda.
semi_join() — Filtra CoincidenciasConserva las filas de x que tienen coincidencia
en y.
Regla: Devuelve solo a los estudiantes asignados a
un curso válido, pero sin incluir las columnas de la
tabla cursos.
by = c("key1" = "key2")Si los identificadores tienen nombres distintos en cada tabla (por
ejemplo, codigo_curso en lugar de id_curso),
especificamos la equivalencia explícitamente:
# Crear copia con diferente nombre de columna
cursos_alt <- cursos %>%
rename(codigo_materia = id_curso)
# Unir especificando la relación entre columnas
estudiantes %>%
left_join(cursos_alt, by = c("id_curso" = "codigo_materia"))| Función | Tipo de Join | Filas Conservadas | Agrega Columnas de Y |
|---|---|---|---|
inner_join() |
Mutating | Solo coincidencias entre X e Y | Sí |
left_join() |
Mutating | Todas las filas de X | Sí |
right_join() |
Mutating | Todas las filas de Y | Sí |
full_join() |
Mutating | Todas las filas de X e Y | Sí |
semi_join() |
Filtering | Solo filas de X con coincidencia en Y | No |
anti_join() |
Filtering | Solo filas de X sin coincidencia en Y | No |