inner_join inner r join data.table outer-join

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