将间隔号分配给向量中的数字

时间:2016-03-24 18:25:14

标签: r

假设我有一个这样的df,显示五个间隔的开始和结束时间:

x = c(120.485, 326.019, 329.089, 337.564, 337.897, 340.133, 451.142, 
456.046, 456.213, 456.847, 458.549, 459.15, 459.416, 459.517, 
462.319, 464.788, 469.626, 590.345, 597.985, 598.152, 599.353, 
600.421, 601.756, 602.523, 602.857, 603.291, 603.758, 604.926, 
605.96, 606.827, 607.161, 608.362, 608.629, 609.764, 610.331, 
610.998, 611.098, 611.165, 617.004, 778.896, 781.065, 782.299, 
782.9, 783.2, 783.5, 783.934, 785.336, 785.669, 787.771, 789.039, 
789.606, 790.207, 791.642, 792.409, 797.714, 1014.59, 1015.29, 
1015.69, 1016.13, 1016.83, 1017.1, 1017.26, 1019.1, 1019.36, 
1019.5, 1019.83, 1020.77, 1021.2, 1022.4, 1022.8, 1023.14, 1023.84, 
1023.94, 1024.44, 1024.97, 1025, 1026.91, 1026.97, 1027.74, 1028.27, 
1029.17, 1029.71, 1029.81, 1032.01, 1032.11, 1033.31, 1035.35, 
1035.68, 1036.75, 1038.28)

我也有一个时间向量,可能出现在这些区间的内部或外部:

findInterval

我想生成另一个向量,声明向量x的值是否i)在所有区间之外,或者ii)它在哪个区间内。

我考虑过使用y <- c(rbind(df$start, df$end)) #get a vector of start-end-start-end etc times findInterval(x, y) 并开始这样:

 [1]  0  1  1  1  1  2  3  3  3  3  3  3  3  3  3  3  4  4  5  5  5  5  5  5  5  5  5  5  5  5  5  5  5  5  5  5  5  5  6  7  7  7
[43]  7  7  7  7  7  7  7  7  7  7  7  7  8  9  9  9  9  9  9  9  9  9  9  9  9  9  9  9  9  9  9  9  9  9  9  9  9  9  9  9  9  9
[85]  9  9  9  9  9 10

输出如下:

findInterval

我可以处理这个来计算由findInterval产生的index = 0结果的间隔位置,但这似乎不是最好的方法。还有更好的方法吗?

如果时间与开始或结束时间相同,则应将其视为属于该时间间隔。 <data> <groups name="Group1"/> <groups name="Group2"/> <groups name="Group3"/> </data> 似乎没有这样做 - 例如。 x的最后一个值是1038.28,但它被认为是在一个新的区间内。我希望它被指定为属于interval = 5。

未出现在间隔中的x值应为NA。

1 个答案:

答案 0 :(得分:2)

这是一个想法:

library(data.table)
setDT(df)

df[.(start = x), on="start", roll=Inf][start > end, id := NA_integer_]$id

 [1] NA  1  1  1  1  1  2  2  2  2  2  2  2  2  2  2  2 NA  3
[20]  3  3  3  3  3  3  3  3  3  3  3  3  3  3  3  3  3  3  3
[39]  3  4  4  4  4  4  4  4  4  4  4  4  4  4  4  4  4  5  5
[58]  5  5  5  5  5  5  5  5  5  5  5  5  5  5  5  5  5  5  5
[77]  5  5  5  5  5  5  5  5  5  5  5  5  5  5

我不确定这是否具有所需的输出,因为OP中没有明确给出。