我有两个数据框 ch 和 shift。在数据框 ch 我有一个名为 pos 的列,其中包含如下所示的数字。在数据帧移位中,我有三列名称为 shft、start 和 end。
ch <- structure(list(pos = c(3.25, 3.75, 4.25, 4.75, 5.25, 5.75, 6.25,
6.75, 7.25, 7.75, 0.25, 0.75, 1.25, 1.75, 2.25, 2.75, 3.25, 3.75,
4.25, 4.75, 5.25, 5.75, 6.25, 6.75, 7.25, 7.75, 0.25, 0.75, 1.25,
1.75, 2.25)), .Names = "pos", row.names = c(NA, -31L), class = "data.frame")
head(ch)
pos
1 3.25
2 3.75
3 4.25
4 4.75
5 5.25
6 5.75
shift <- structure(list(shift = structure(c(2L, 3L, 2L, 4L, 3L, 4L, 3L,
1L, 4L, 1L, 4L, 2L, 1L, 2L, 1L, 3L, 2L), .Label = c("A", "B",
"C", "D"), class = "factor"), start = c(0, 0.25, 0.75, 1.25,
1.75, 2.25, 2.75, 3.25, 3.75, 4.25, 4.75, 5.25, 5.75, 6.25, 6.75,
7.25, 7.75), end = c(0.25, 0.75, 1.25, 1.75, 2.25, 2.75, 3.25,
3.75, 4.25, 4.75, 5.25, 5.75, 6.25, 6.75, 7.25, 7.75, 8)), .Names = c("shft",
"start", "end"), class = "data.frame", row.names = c(NA, -17L
))
头(班)
shft start end
1 B 0.00 0.25
2 C 0.25 0.75
3 B 0.75 1.25
4 D 1.25 1.75
5 C 1.75 2.25
6 D 2.25 2.75
我想检查 ch 数据帧中 pos 列中的每个数字,其范围列在 shift 数据帧的 start 和 end 列中,并且必须在名称 shift 的列中分配相应的 shft,例如 A、B、C、D .
比较必须是这样的>= start and < end
。
通过查看stackoverflow上的一个问题,我找到了一个解决方案,但它的工作方式类似于该值将落在哪个范围内
library(data.table)
T1 <- data.table(ch)
T2 <- data.table(shift)
setkey(T2, start, end)
T1[, c("start", "end") := pos]
foverlaps(T1, T2)
使用上面的命令行,结果就像 0.25 一样,我将得到一个带有 shift B 的行和一个带有 shift c 的行。在我的数据框中,我有 31 行,在结果中执行上述脚本后,我有 62 行。
有人可以告诉我如何进行比较,(>= start and < end)
而不仅仅是落在范围内。现实中的数据框 ch 不仅有我所显示的数字,如 0.25、3.25、7.25,而且还有 3.14、0.89、7.25、6.93、5、46。