data.table join with roll =“nearest”返回"搜索值"而不是原始价值

时间:2016-08-26 07:32:59

标签: r data.table

我遇到了二元搜索功能J()roll = "nearest"的问题。

我们说我得到了这个例子data.table" dt"

Key  Value1  Value2
20   4       5
12   2       1
55   10      7

我使用roll = "nearest"进行搜索:

dt[J(15), roll = "nearest"]

...返回:

Key  Value1  Value2
15   2       1

因此,返回正确的行。然而,原来的" Key" value(12)被搜索(15)中使用的值替换。

我的问题是一个正常的行为,可以更改此自动覆盖吗?

编辑:

可重复的示例(注意我使用版本1.9.7):

library("data.table")
dt <- data.table(c(20,12,55), c(4,2,10), c(5,1,7))
dt
#   V1 V2 V3
#1: 20  4  5
#2: 12  2  1
#3: 55 10  7
setkey(dt, V1)
dt[J(15), roll = "nearest"]
#   V1 V2 V3
#1: 15  2  1

1 个答案:

答案 0 :(得分:6)

您可能需要1.9.7中的data.table才能使x.V1正常工作。然后,您可以明确地引用x数据集中的列。这是必需的,因为连接中使用的列来自第二个数据集i,因为它位于基础R中。

library("data.table")
dt <- data.table(c(20,12,55), c(4,2,10), c(5,1,7))
setkey(dt, V1)
dt[J(15), .(V1=x.V1, V2, V3), roll = "nearest"]
#   V1 V2 V3
#1: 12  2  1

如你所说,你已经拥有1.9.7,对于那些没有看到Installation wiki的人来说。