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

Len*_*nie 7 r data.table

我得到的二进制搜索功能的问题J()roll = "nearest".

假设我得到了这个例子data.table"dt"

Key  Value1  Value2
20   4       5
12   2       1
55   10      7
Run Code Online (Sandbox Code Playgroud)

我用以下搜索roll = "nearest":

dt[J(15), roll = "nearest"]
Run Code Online (Sandbox Code Playgroud)

...返回:

Key  Value1  Value2
15   2       1
Run Code Online (Sandbox Code Playgroud)

因此,返回正确的行.但是,原始的"密钥"值(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
Run Code Online (Sandbox Code Playgroud)

jan*_*cki 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
Run Code Online (Sandbox Code Playgroud)

如你所说,你已经拥有1.9.7,对于其他没有看到安装维基的人.