【问题标题】:What does < stand for in data.table joins with on=< 在 data.table 中与 on= 连接代表什么
【发布时间】:2018-10-13 12:41:02
【问题描述】:

加入数据表:

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

通过

X[Y, on = .(A == A)]
#    A B
# 1: 4 1

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

X[Y, on = .(A < A)]
#    A B
# 1: 4 1
# 2: 4 1
# 3: 4 1

返回

   A B
1: 1 1
2: 2 1
3: 3 1

因为关键字on

指出 x 中的哪些列应该与 i 中的哪些列以及要连接的二元运算符的类型进行连接

根据?data.table。没有明确提到加入的方式,当然也不是我猜到的。 &lt; 究竟是如何将 x 中的列与 i 中的列连接起来的?

【问题讨论】:

  • 附注:您可以将X[Y, on = .(A == A)] 简化为X[Y, on = .(A)]X[Y, on = "A"]
  • 另见 ?data.table 关于 j 参数:“x 的列现在可以使用前缀 x. 来引用,并且在加入时特别有用以引用 x' s 连接列,否则它们会被 i's 所掩盖”

标签: r data.table left-join


【解决方案1】:

当进行像X[Y, on = .(A &lt; A)] 这样的非等连接时,Yi-data.table)返回A-列。

为了得到想要的结果,你可以这样做:

X[Y, on = .(A < A), .(A = x.A, B)]

给出:

   A B
1: 1 1
2: 2 1
3: 3 1

在下一个版本中, 将返回两个 A 列。 See here for the discussion.

【讨论】:

    【解决方案2】:

    你说对了一部分。难题的缺失部分是(当前)当您执行任何连接时,包括与&lt; 的非等连接,为连接列返回单个列(在您的示例中为A)。此列从连接右侧的data.table 中获取值,在本例中,A 中的值来自Y

    这是一个图解示例:

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

    【讨论】:

      猜你喜欢
      • 2014-12-08
      • 2012-01-20
      • 1970-01-01
      • 2014-02-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-14
      • 1970-01-01
      相关资源
      最近更新 更多