我遇到了二元搜索功能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
答案 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的人来说。