經過大量的思考和谷歌搜索後,我找不到解決我的問題,我希望你能幫助我。R找到時間段之間的重疊
我有一個ID列可以重複2次以上的大數據框,一個開始和結束日期列將構成一個時間段。我想知道,按照ID進行分組,如果該ID的任何時間段與另一個ID重疊,並且如果是,則通過例如創建新列來標記該ID,說明該ID是否具有重疊。
下面是一個例子的數據幀已經具有期望的新列:
structure(list(ID= c(34L, 34L, 80L, 80L, 81L, 81L, 81L, 94L,
94L), Start = structure(c(1072911600, 1262300400, 1157061600,
1277935200, 1157061600, 1277935200, 1157061600, 1075590000, 1285891200
), class = c("POSIXct", "POSIXt"), tzone = ""), End = structure(c(1262214000,
1409436000, 1251669600, 1404079200, 1251669600, 1404079200, 1251669600,
1264892400, 1475193600), class = c("POSIXct", "POSIXt"), tzone = ""),
Overlap = c(FALSE, FALSE, FALSE, FALSE, TRUE, TRUE, TRUE,
FALSE, FALSE)), .Names = c("ID", "Start", "End", "Overlap"
), row.names = c(NA, -9L), class = "data.frame")
ID Start End Overlap
34 2004-01-01 00:00:00 2009-12-31 00:00:00 FALSE
34 2010-01-01 00:00:00 2014-08-31 00:00:00 FALSE
80 2006-09-01 00:00:00 2009-08-31 00:00:00 FALSE
80 2010-07-01 00:00:00 2014-06-30 00:00:00 FALSE
81 2006-09-01 00:00:00 2009-08-31 00:00:00 TRUE
81 2010-07-01 00:00:00 2014-06-30 00:00:00 TRUE
81 2006-09-01 00:00:00 2009-08-31 00:00:00 TRUE
94 2004-02-01 00:00:00 2010-01-31 00:00:00 FALSE
94 2010-10-01 02:00:00 2016-09-30 02:00:00 FALSE
在這種情況下,對於ID「81」有兩個時間週期之間的重疊,所以我想標誌的所有行ID = 81爲TRUE,這意味着在該ID的至少兩行中發現重疊。這只是一個理想的解決方案,但總的來說,我想要做的就是根據ID進行分組時找出重疊部分,因此標記它的方式可以靈活,以便簡化事情。
在此先感謝您的幫助。
有什麼你已經試過了?你卡在哪裏? –
從data.table包中檢查'foverlaps'。 [這是一個讓你開始的帖子](http://stackoverflow.com/questions/24480031/roll-join-with-start-end-window/25655497#25655497)。 – Arun