什么<表示在data.table中加入on =

FOM*_*OMH 8 r left-join data.table

加入数据表:

X <- data.table(A = 1:4, B = c(1,1,1,1)) 
#    A B
# 1: 1 1
# 2: 2 1
# 3: 3 1
# 4: 4 1

Y <- data.table(A = 4)
#    A
# 1: 4
Run Code Online (Sandbox Code Playgroud)

通过

X[Y, on = .(A == A)]
#    A B
# 1: 4 1
Run Code Online (Sandbox Code Playgroud)

返回预期结果.但是,我希望这条线:

X[Y, on = .(A < A)]
#    A B
# 1: 4 1
# 2: 4 1
# 3: 4 1
Run Code Online (Sandbox Code Playgroud)

回来

   A B
1: 1 1
2: 2 1
3: 3 1
Run Code Online (Sandbox Code Playgroud)

因为关键字on:

指示x中哪些列应与i中的哪些列连接以及要连接的二进制运算符的类型

根据?data.table.加入的方式没有明确提及,当然也没有我猜到的那样.如何<将x中的列与i中的列完全连接?

Jaa*_*aap 8

在执行非equi连接时,例如X[Y, on = .(A < A)] AY(i-data.table)返回-column.

要获得所需的结果,您可以:

X[Y, on = .(A < A), .(A = x.A, B)]
Run Code Online (Sandbox Code Playgroud)

这使:

   A B
1: 1 1
2: 2 1
3: 3 1
Run Code Online (Sandbox Code Playgroud)

在下一个版本中,将返回两A列.请参阅此处进行讨论.


Sco*_*hie 7

你是部分正确的.这个难题的缺失是(当前)当您执行任何连接时,包括非等连接<,为连接列返回单个列(A在您的示例中).此列采用data.table连接右侧的值,在本例中为Afrom中的值Y.

这是一个举例说明的例子:

当前非equi连接行为的插图

我们计划在将来的版本中更改此行为,data.table以便在非equi连接的情况下返回两列.请参阅请求https://github.com/Rdatatable/data.table/pull/2706https://github.com/Rdatatable/data.table/pull/3093.