r merge data.table

r - Left join Table usando Data.Table



merge (2)

Supongamos que tengo dos tablas:

UN

A B 1: 1 12 2: 2 13 3: 3 14 4: 4 15

segundo

A B 1: 2 13 2: 3 14

y tengo el siguiente código:

merge_test = merge(dataA,dataB,by="A",all.data=TRUE)

Yo obtengo:

A B.x B.y 1: 2 13 13 2: 3 14 14

Sin embargo, quiero todas las filas en dataA en la tabla fusionada final. ¿Hay alguna forma de hacer esto?


Puedes intentar esto:

A <- data.table(a = 1:4, b = 12:15) B <- data.table(a = 2:3, b = 13:14, key = ''a'') B[A]


Si desea agregar los valores b de B a A , entonces es mejor unirse a A con B y actualizar A por referencia de la siguiente manera:

A[B, bb:=i.b, on=''a'']

lo que da:

> A a b bb 1: 1 12 NA 2: 2 13 13 3: 3 14 14 4: 4 15 NA

Esta es una mejor aplicación que usar B[A, on=''a''] porque este último simplemente imprime el resultado en la consola. Cuando desee volver a obtener los resultados en A , necesita usar A <- B[A, on=''a''] que le dará el mismo resultado.

La razón por la que A[B, bb:=ib, on=''a''] es mejor que A <- B[A, on=''a''] es la eficiencia de la memoria. Con A[B, bb:=ib, on=''a''] la ubicación de A en la memoria se mantiene igual:

> address(A) [1] "0x102afa5d0" > A[B, bb:=i.b, on=''a''] > address(A) [1] "0x102afa5d0"

Mientras que, por otro lado, con A <- B[A, on=''a''] , se crea un nuevo objeto y se guarda en la memoria como A y, por lo tanto, tiene otra ubicación en la memoria:

> address(A) [1] "0x102abae50" > A <- B[A, on=''a''] > address(A) [1] "0x102aa7e30"

Aunque esto realmente no hace una defference en pequeños conjuntos de datos como estos, hace la diferencia en los grandes conjuntos de datos para los que se diseñó data.table .

Datos usados:

A <- data.table(a = 1:4, b = 12:15) B <- data.table(a = 2:3, b = 13:14)