【发布时间】:2019-11-11 10:33:05
【问题描述】:
我有一个大型数据集,我想在其中识别在时间和空间上重叠的观察结果。每个观察都有一个唯一的 ID,我已经确定了那些在空间上重叠的 ID,由 overlap_space 给出。现在,我想检查在空间中重叠的观察的起点/终点是否也重叠。
下面给出一个简单的例子:
start <- c("2007-06-27", "2010-06-30", "2015-01-01", "2012-01-01", "2010-01-01", "2009-01-01")
end <- c("2008-10-01", "2010-07-01", "2017-02-02", "2013-01-01", "2010-07-03", "2012-01-01")
df <- data.frame(id = c(1:6),
start = as.Date(start, format = "%Y-%m-%d"),
end = as.Date(end, format = "%Y-%m-%d"),
overlap_id = as.character(c("2, 4", "1, 3, 5", "2, 5", "1, 5, 6", "2, 3, 4", "4")))```
> df
id start end overlap_id
1 1 2007-06-27 2008-10-01 2, 4
2 2 2010-06-30 2010-07-01 1, 3, 5
3 3 2015-01-01 2017-02-02 2, 5
4 4 2012-01-01 2013-01-01 1, 5, 6
5 5 2010-01-01 2010-07-03 2, 3, 4
6 6 2009-01-01 2012-01-01 4
并非所有空间重叠的 ID 在时间上都重叠。我如何识别那些做的?换句话说,我需要匹配overlap_id(可以使用tidyr::separate_rows(overlap_id) 以及开始/结束日期将其制成更长的格式。我尝试使用lubridate::interval 设置日期间隔,但我没有能够确保重叠限制在overlap_id 中标识的范围内。
这是我想要的输出:
> df
id start end overlap_id time_overlap overlap_dummy
1 1 2007-06-27 2008-10-01 2, 4 NA 0
2 2 2010-06-30 2010-07-01 1, 3, 5 5 1
3 3 2015-01-01 2017-02-02 2, 5 NA 0
4 4 2012-01-01 2013-01-01 1, 5, 6 6 1
5 5 2010-01-01 2010-07-03 2, 3, 4 2 1
6 6 2009-01-01 2012-01-01 4 6 1
任何帮助将不胜感激!谢谢。
【问题讨论】: