我有两个数据帧ch和shift。在数据框中,我有一个名称为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列的每个数字,其中列出了移位数据帧的开始和结束列,并且必须在列中分配相应的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。
答案 0 :(得分:1)
鉴于您的所有分区都重叠:
编辑:我意识到你现在想要&gt; =开始,而不是&lt; = end,这是一个简单的修复,cut right = FALSE
基地R:
ch$shift <- cut(ch$pos,breaks = c(0,shift$end),labels = shift$shft, right = FALSE)
使用dplyr:
ch <- ch %>% mutate(shift = cut(pos,breaks = c(0,shift$end),labels = shift$shft, right = FALSE))