我有一个这样的数据框:
d <- data.frame(start = c(3.2, 7.8, 10.1, 12.1, 14.1, 17.9),
end = c(5.6, 8.1, 11.1, 13.6, 16.1, 22.3),
v1 = 1:6)
看起来像这样
> d
start end v1
1 3.2 5.6 1
2 7.8 8.1 2
3 10.1 11.1 3
4 12.1 13.6 4
5 14.1 16.1 5
6 17.9 22.3 6
我现在希望它延伸到长度为1的间隔(由开始,结束定义)。它应该是这样的:
start end v1
3 4 1
4 5 1
5 6 1
7 8 2
8 9 2
10 11 3
11 12 3
12 13 4
13 14 4
...
22 23 6
感谢
我希望看到一个dplyr解决方案,如果可能的话
答案 0 :(得分:3)
以下是使用data.table::foverlaps
的示例:
library(data.table)
dt1 <- as.data.table(d)
dt2 <- as.data.table(embed(seq(floor(min(d$start)), ceiling(max(d$end))), 2)[, 2:1])[, .(start=as.numeric(V1), end=as.numeric(V2))]
setkey(dt2, start, end)
foverlaps(dt1, dt2)[, -(3:4), with=F]
start end v1
1: 3 4 1
2: 4 5 1
3: 5 6 1
4: 7 8 2
5: 8 9 2
6: 10 11 3
7: 11 12 3
8: 12 13 4
9: 13 14 4
10: 14 15 5
11: 15 16 5
12: 16 17 5
13: 17 18 6
14: 18 19 6
15: 19 20 6
16: 20 21 6
17: 21 22 6
18: 22 23 6
(或merge(dt2, foverlaps(dt1, dt2)[, -(3:4), with=F], by=c("start", "end"), all.x=TRUE)
如果您需要NA
s)