首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >R:有效地找到我的值适合的正确范围。

R:有效地找到我的值适合的正确范围。
EN

Stack Overflow用户
提问于 2016-07-12 15:27:58
回答 1查看 77关注 0票数 0

我有一个巨大的表,其中充满了范围(2列),即min和max:

1,5 6、10 11、15

诸若此类。我想要一个函数,给定一个数字,返回正确范围的两个边界。假设我输入f(12),我想返回11和15。

我想要一些帮助,如何在R中构建它,它必须是有效的,因为表相对比较大(100万行)。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-07-19 22:18:22

使用当前data.table开发版本中可用的新的非赤道联接特性,v1.9.7:

代码语言:javascript
复制
require(data.table) # v1.9.7+
foo <- function(x, y) {
    x = setDT(list(x=x))                     # convert to data.table
    x[y, on=.(x >= V1, x <= V2), nomatch=0L] # perform a conditional join
}
foo(12, dt)
#     x x.1
# 1: 11  15

其中:

代码语言:javascript
复制
dt = fread('1,5\n6,10\n11,15\n')
#    V1 V2
# 1:  1  5
# 2:  6 10
# 3: 11 15

有关开发版本这里,请参见安装说明。

请注意,对于重复调用,由于对[.data.table的调用开销,它可能不是有效的。假设您希望获得输入的所有间隔范围,3,4,12,19,那么我将这样做:

代码语言:javascript
复制
require(data.table) #v1.9.7+
x = data.table(x=c(3,4,12,19), id = 1:4)
x[dt, on=.(x >= V1, x <= V2), nomatch=0L]
#     x id x.1
# 1:  1  1   5
# 2:  1  2   5
# 3: 11  3  15

第一个值(id=1)是1,5,第二个值(id=2)也是。第三是在11,15。第四是没有结果,因为nomatch=0

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38333140

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档