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

前端之家收集整理的这篇文章主要介绍了data.table join with roll =“nearest”返回“搜索值”而不是原始值前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我遇到了二进制搜索函数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的人.

原文链接:https://www.f2er.com/mssql/77034.html

猜你在找的MsSQL相关文章