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。我不知道为什么它不起作用。