r - R - 找到所有可能的成对日期重叠
问题描述
我正在使用一个数据集,该数据集显示了多个气象站观测数据的时间可用性:
library(data.table)
dat <- fread("https://www.dropbox.com/s/fih7e2o8hrnewx7/dat.csv?dl=1") # ~43 KB
> dat
ID startdate enddate
1: 193 2000-01-01 2003-12-02
2: 1 2000-01-01 2006-12-03
3: 2 2000-01-01 2006-12-03
4: 4 2000-01-01 2006-12-03
5: 5 2000-01-01 2006-12-03
---
1631: 1277 2017-05-01 2019-11-09
1632: 1300 2017-05-01 2019-11-09
1633: 1321 2017-05-01 2019-11-09
1634: 1248 2017-05-06 2018-06-21
1635: 1265 2017-05-08 2019-12-18
我需要的是找到所有可能的 ID 对的重叠日期。根据对我上一个问题的反馈(R - 根据另一个数据框查找每组的重叠日期),这是我迄今为止尝试过的:
# convert character to dates
cols <- c("startdate","enddate")
dat[, (cols) := lapply(.SD, as.Date), .SDcols = cols]
# perform overlapping join
# i.e. find common dates for each station pair
setkey(dat, startdate, enddate)
olap <- unique(foverlaps(dat, dat)[ID!=i.ID, .(
ID1=pmin(ID, i.ID),
ID2=pmax(ID, i.ID),
common_date_begin=pmax(startdate, i.startdate),
common_date_end=pmin(enddate, i.enddate))])
> olap
ID1 ID2 common_date_begin common_date_end
1: 1 193 2000-01-01 2003-12-02
2: 2 193 2000-01-01 2003-12-02
3: 4 193 2000-01-01 2003-12-02
4: 5 193 2000-01-01 2003-12-02
5: 6 193 2000-01-01 2003-12-02
---
1270379: 1248 1300 2017-05-06 2018-06-21
1270380: 1265 1300 2017-05-08 2019-11-09
1270381: 1248 1321 2017-05-06 2018-06-21
1270382: 1265 1321 2017-05-08 2019-11-09
1270383: 1248 1265 2017-05-08 2018-06-21
起初,这似乎是我想要的。但是,有一些对没有出现在结果数据表中,尽管它们确实有重叠的时间段。一些例子是:
> olap[ID1==997 & ID2==872]
Empty data.table (0 rows and 4 cols): ID1,ID2,common_date_begin,common_date_end
> olap[ID1==997 & ID2==785]
Empty data.table (0 rows and 4 cols): ID1,ID2,common_date_begin,common_date_end
但请注意,在原始数据集中,上述 ID 确实有重叠日期:
> dat[ID==997]
ID startdate enddate
1: 997 2000-03-01 2017-01-22
> dat[ID==872]
ID startdate enddate
1: 872 2000-03-01 2019-08-09
> dat[ID==785]
ID startdate enddate
1: 785 2000-03-01 2019-12-31
我做错了什么?我错过了任何论点foverlaps
吗?
解决方案
您的代码很好,但您的子集中 ID 的顺序是向后的。试试olap[ID1==872 & ID2==997]
。
推荐阅读
- flutter - 你如何打开一个列表
进入列表 - python - 使用 Python 更改麦克风声音(在 Windows 中)
- json - 为什么我在 kotlinx.serialization 中收到 JsonDecodingException 异常?
- python - 如何处理 Python 中的 NoneType 错误?
- javascript - p5 js 在他们的网站编辑器中的行为与在我的编辑器中不同
- c# - Web 服务调用的随机异常
- react-native - 如何使用 jest/enzyme 测试功能组件中的条件块?
- android - 添加到 FragmentContainerView 的视图必须与 Fragment 关联
- ms-access - MS Access 指数、除法和舍入
- c# - 在 Xamarin 中使用 SwipeView 删除列表项