Unir dataframes en R

por | May 11, 2020 | R | 0 Comentarios

La unión de dataframes se hace aplicando la teoría de conjuntos. En la imagen se muestra de forma visual que subconjunto de datos tenemos en cada caso.

Teoría de conjuntos

Cargar datos del dataframe

# Conjunto de datos 1
id1 <- c (1:6)
valor1 <- c("A","B","C","D","E","F")
datos1 <- data.frame(id=id1,valor1= valor1)
head(datos1)
#   id valor1
# 1  1      A
# 2  2      B
# 3  3      C
# 4  4      D
# 5  5      E
# 6  6      F
# Conjunto de datos 2
id2 <- c (1,2,3,NA,4,7)
valor2 <- c(rep("francia",2),rep("italia",2),rep("portugal",2))
datos2 <- data.frame(id=id2,valor2= valor2)
head(datos2)
#   id   valor2
# 1  1  francia
# 2  2  francia
# 3  3   italia
# 4 NA   italia
# 5  4 portugal
# 6  7 portugal

Unir dataframes por la izquierda

join <- datos1 %>% left_join(datos2, by="id")
head(join, n= 10)
#   id valor1   valor2
# 1  1      A  francia
# 2  2      B  francia
# 3  3      C   italia
# 4  4      D portugal
# 5  5      E     <NA>
# 6  6      F     <NA>

Unir dataframes por la derecha

join <- datos1 %>% right_join(datos2, by="id") 
head(join, n= 10)
#   id valor1   valor2
# 1  1      A  francia
# 2  2      B  francia
# 3  3      C   italia
# 4 NA   <NA>   italia
# 5  4      D portugal
# 6  7   <NA> portugal

Unir dataframes completos

join <- datos1 %>% full_join(datos2, by="id") 
head(join, n= 10)
#   id valor1   valor2
# 1  1      A  francia
# 2  2      B  francia
# 3  3      C   italia
# 4  4      D portugal
# 5  5      E     <NA>
# 6  6      F     <NA>
# 7 NA   <NA>   italia
# 8  7   <NA> portugal

Seleccionar la intersección de los dataframes

join <- datos1 %>% inner_join(datos2, by="id")  
head(join, n= 10)
#   id valor1   valor2
# 1  1      A  francia
# 2  2      B  francia
# 3  3      C   italia
# 4  4      D portugal

Sígueme en Youtube - canal Análisis de datos
Unir dataframes en R

El código fuente lo podeis encontrar en GitHub:

https://github.com/diegocalvobarreno/ejemplos-en-R/blob/master/Unir-dataframes.R

0 comentarios

Enviar un comentario

Tu dirección de correo electrónico no será publicada.