R Data.Table:内存左侧连接左侧和右侧的多个列

时间:2017-08-14 14:58:47

标签: r data.table left-join

我想使用数据表合并多个列上的两个数据表。

## The two tables
A <- data.table(a = 1:4, b = 12:15, c = 10:13)
   a  b  c
1: 1 12 10
2: 2 13 11
3: 3 14 12
4: 4 15 13

B <- data.table(a = 1:3, b = 12:14, d = 10:12, e = 10:12)
   a  b  d  e
1: 1 12 10 10
2: 2 13 11 11
3: 3 14 12 12    

我想得到这个结果:

A <- merge(A, B, by = c('a', 'b'), all.x = T)
   a  b  c  d  e
1: 1 12 10 10 10
2: 2 13 11 11 11
3: 3 14 12 12 12
4: 4 15 13 NA NA

This answer表明数据表可以在内存中编辑A数据帧,因此在使用大型数据集时效率更高。建议的代码是

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

如何更改此代码以便A数据框在内存中合并,结果将与上面相同?

1 个答案:

答案 0 :(得分:1)

如果我们打算做join。此处不需要i.di.e,因为这些列在&#39; B&#39;

中是唯一的
nm1 <- setdiff(names(B), names(A)) 
A[B, (nm1) :=  mget(nm1), on = .(a, b)]
A
#   a  b  c  d  e
#1: 1 12 10 10 10
#2: 2 13 11 11 11
#3: 3 14 12 12 12
#4: 4 15 13 NA NA