【问题标题】:Keep columns in join data.table将列保留在连接 data.table 中
【发布时间】:2017-06-20 14:25:22
【问题描述】:

我不明白为什么在这个连接中我无法检索到我的 DT2 的 sub_item 列?

DT <- data.table(ID=c(1:4),OBS_VALUE=10:13)
DT2 <- data.table(ID=c(1:4),sum_item=c(10,11.5,12.5,18))

setkey(DT,ID)
setkey(DT2,ID)

S_toset_sum <- DT[DT2,diff := abs(OBS_VALUE-sum_item)][diff<3]

在输出中我想保留 sum_item,因为我想保留此列而不是 OBS_VALUE 列。

【问题讨论】:

  • sum_item 属于DT2,而您使用DT + 您创建的新列(diff),为什么sum_item 会在那里?
  • 在 j 参数中返回一个列表,其中包含要返回的变量。例如,DT[DT2, on="ID", .(sum_item, diff = abs(OBS_VALUE-sum_item))][diff&lt;3]
  • 也许是一种更类似于 data.table 的方式:DT[DT2, `:=` (sum_item = i.sum_item, diff = abs(OBS_VALUE-sum_item))][diff&lt;3]
  • 如果您的两个表具有相同的键(从某种意义上说,有一个 ID == 1,一个 ID == 2 等),不清楚为什么它们一开始是分开的......
  • 弗兰克,我认为在不了解这些表有多大、值实际代表什么、如何创建表等的情况下这么说是一件很奇怪的事情。当然,如果所有这些表都更好数据驻留在一个巨大的巨型表中,但这并不总是实用的。

标签: r join data.table


【解决方案1】:

您必须指定要保留的列,以及要加入的键。

S_toset_sum <- DT[DT2, on = 'ID', .(ID, OBS_VALUE, sum_item, diff = abs(OBS_VALUE-sum_item))][diff<3]

【讨论】:

    猜你喜欢
    • 2019-08-14
    • 2017-11-12
    • 2019-02-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多