加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

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

发布时间:2020-12-12 07:07:29 所属栏目:MsSql教程 来源:网络整理
导读:我遇到了二进制搜索函数J()和roll =“nearest”的问题. 假设我得到了这个例子data.table“dt” Key Value1 Value220 4 512 2 155 10 7 我用roll =“nearest”进行搜索: dt[J(15),roll = "nearest"] …返回: Key Value1 Value215 2 1 因此,返回正确的行.但是
我遇到了二进制搜索函数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的人.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读