我遇到了二进制搜索函数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
因此,返回正确的行.但是,原始的“密钥”值(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.9.7中的data.table才能使x.V1正常工作.然后,您可以显式引用x dataset中的列.这是必需的,因为连接中使用的列是从第二个数据集i中获取的,因为它位于基础R中.
library("data.table") dt <- data.table(c(20,7)) setkey(dt,.(V1=x.V1,V2,V3),roll = "nearest"] # V1 V2 V3 #1: 12 2 1
正如你所提到的,你已经拥有1.9.7,对于其他没有看到Installation wiki的人.