Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
R 寻找合适的时间间隔_R_Algorithm - Fatal编程技术网

R 寻找合适的时间间隔

R 寻找合适的时间间隔,r,algorithm,R,Algorithm,假设我有几个区间,它们是实线的子集,如下所示: I_1 = [0, 1] I_2 = [1.5, 2] I_3 = [5, 9] I_4 = [13, 16] DT1 = data.table(start=c(0,1.5,5,1,2,3,4,5), end=c(1,2,9,2,3,4,5,6)) DT1[, id := .I] # .I is a special variable. See ?data.table setkey(DT1, start, end) DT2 = data.tabl

假设我有几个区间,它们是实线的子集,如下所示:

I_1 = [0, 1]
I_2 = [1.5, 2]
I_3 = [5, 9]
I_4 = [13, 16]
DT1 = data.table(start=c(0,1.5,5,1,2,3,4,5), end=c(1,2,9,2,3,4,5,6))
DT1[, id := .I] # .I is a special variable. See ?data.table
setkey(DT1, start, end)

DT2 = data.table(start=4.5 ,end=4.5)
olaps = foverlaps(DT2, DT1, type="within", which=TRUE)

olaps[, yid := DT1$id[yid]]
#    xid yid
# 1:   1   7
现在给定一个实数,比如说,我想找出哪个区间包含这个数。我想知道找到这个区间的算法,和/或在R中如何做到这一点


提前感谢。

使用非等联接更新:

在中使用新的非等联接功能,这将更加简单和直接:

这将搜索
DT2
中的每个间隔是否完全位于
DT1
中。在您的例子中,
DT2
是一个点,而不是一个间隔。如果它在
DT1
中的任何间隔内都不存在,它将返回
NA

查看
?foverlaps
,查看您可以使用的其他参数。例如,
mult=
参数控制是否要返回所有匹配行或仅返回第一行或最后一行等


由于
setkey
对结果进行排序,因此必须添加一个单独的
id
,如下所示:

I_1 = [0, 1]
I_2 = [1.5, 2]
I_3 = [5, 9]
I_4 = [13, 16]
DT1 = data.table(start=c(0,1.5,5,1,2,3,4,5), end=c(1,2,9,2,3,4,5,6))
DT1[, id := .I] # .I is a special variable. See ?data.table
setkey(DT1, start, end)

DT2 = data.table(start=4.5 ,end=4.5)
olaps = foverlaps(DT2, DT1, type="within", which=TRUE)

olaps[, yid := DT1$id[yid]]
#    xid yid
# 1:   1   7

@阿伦…谢谢你的关注。下面是使用上述代码的一个问题。>DT1=data.table(start=c(0,1.5,5,1,2,3,4,5),end=c(1,2,9,2,3,4,5,6))>DT2=data.table(start=4.5,end=4.5)>setkey(DT1)>foverlaps(DT2,DT1,which=TRUE,type=“in”)>xid yid 1:1:1:52:16上述答案肯定是不正确的……答案应该是7。但它给出了5和6。我不知道为什么它不起作用。