我有一个巨大的表,其中充满了范围(2列),即min和max:
1,5 6、10 11、15
诸若此类。我想要一个函数,给定一个数字,返回正确范围的两个边界。假设我输入f(12),我想返回11和15。
我想要一些帮助,如何在R中构建它,它必须是有效的,因为表相对比较大(100万行)。
发布于 2016-07-19 22:18:22
使用当前data.table开发版本中可用的新的非赤道联接特性,v1.9.7:
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其中:
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,那么我将这样做:
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。
https://stackoverflow.com/questions/38333140
复制相似问题