inner - ¿Cómo se hace una unión completa usando data.table?
inner join r dplyr (2)
En las data.table
frecuentes de data.table
, se dice que el parámetro nomatch = NA
es similar a una unión externa. Sin embargo, no he podido obtener data.table
para hacer una combinación externa completa , solo combinaciones externas correctas.
Por ejemplo:
a <- data.table("dog" = c(8:12), "cat" = c(15:19))
dog cat
1: 8 15
2: 9 16
3: 10 17
4: 11 18
5: 12 19
b <- data.table("dog" = 1:10, "bullfrog" = 11:20)
dog bullfrog
1: 1 11
2: 2 12
3: 3 13
4: 4 14
5: 5 15
6: 6 16
7: 7 17
8: 8 18
9: 9 19
10: 10 20
setkey(a, dog)
setkey(b, dog)
a[b, nomatch = NA]
dog cat bullfrog
1: 1 NA 11
2: 2 NA 12
3: 3 NA 13
4: 4 NA 14
5: 5 NA 15
6: 6 NA 16
7: 7 NA 17
8: 8 15 18
9: 9 16 19
10: 10 17 20
Por lo tanto, nomatch = NA
produce una unión externa derecha (que es la predeterminada). ¿Qué pasa si necesito una inscripción completa? Por ejemplo:
merge(a, b, by = "dog", all = TRUE)
# Or with plyr:
join(a, b, by = "dog", type = "full")
dog cat bullfrog
1: 1 NA 11
2: 2 NA 12
3: 3 NA 13
4: 4 NA 14
5: 5 NA 15
6: 6 NA 16
7: 7 NA 17
8: 8 15 18
9: 9 16 19
10: 10 17 20
11: 11 18 NA
12: 12 19 NA
¿Es eso posible con data.table
?
Realmente lo tienes justo ahí. Use merge.data.table
que es exactamente lo que está haciendo cuando llama
merge(a, b, by = "dog", all = TRUE)
dado que a
es un data.table
, merge(a, b, ...)
llama a merge.data.table(a, b, ...)
x= data.table(a=1:5,b=11:15)
y= data.table(a=c(1:4,6),c=c(101:104,106))
setkey(x,a)
setkey(y,a)
unique_keys <- unique(c(x[,a], y[,a]))
y[x[.(unique_keys), on="a"] ] # Full Outer Join