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.
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
El código fuente lo podeis encontrar en GitHub:
https://github.com/diegocalvobarreno/ejemplos-en-R/blob/master/Unir-dataframes.R
0 comentarios