查找每个ID的重叠日期范围

问题描述 投票:-1回答:2

我有以下小标题:

tibble::tribble(
  ~person_id, ~mandate_start, ~mandate_end,
         160,   "1939-04-03", "1971-05-23",
         160,   "1935-04-29", "1939-04-02",
         976,   "1935-04-29", "1943-05-02",
         976,   "1951-04-30", "1958-09-01",
         982,   "1939-04-03", "1943-05-02",
         982,   "1947-05-05", "1955-05-08",
         989,   "1943-05-03", "1951-04-29",
         989,   "1935-04-29", "1937-10-18",
        1333,   "1943-05-03", "1955-05-08",
        1333,   "1959-04-27", "1971-05-23"
  )

我需要确定每个person_id重叠的任务。我应该怎么做?上面的小标题只是更大的小标题的快照。

r
2个回答
0
投票
my_tibble %>%  
+   arrange(person_id, mandate_start, mandate_end) %>%  
+   group_by(person_id) %>%  
+   mutate(previous_end = lag(mandate_end), 
+          next_start = lead(mandate_start)) %>% 
+ ungroup %>%  
+ mutate(overlap_with_prev = !is.na(previous_end) & mandate_start <= previous_end, 
+        overlap_with_next = !is.na(next_start)   &  mandate_end >= next_start)
# A tibble: 10 x 7
   person_id mandate_start mandate_end previous_end next_start overlap_with_prev overlap_with_next
       <dbl> <chr>         <chr>       <chr>        <chr>      <lgl>             <lgl>            
 1       160 1935-04-29    1939-04-02  NA           1939-04-03 FALSE             FALSE            
 2       160 1939-04-03    1971-05-23  1939-04-02   NA         FALSE             FALSE            
 3       976 1935-04-29    1943-05-02  NA           1951-04-30 FALSE             FALSE            
 4       976 1951-04-30    1958-09-01  1943-05-02   NA         FALSE             FALSE            
 5       982 1939-04-03    1943-05-02  NA           1947-05-05 FALSE             FALSE            
 6       982 1947-05-05    1955-05-08  1943-05-02   NA         FALSE             FALSE            
 7       989 1935-04-29    1937-10-18  NA           1943-05-03 FALSE             FALSE            
 8       989 1943-05-03    1951-04-29  1937-10-18   NA         FALSE             FALSE            
 9      1333 1943-05-03    1955-05-08  NA           1959-04-27 FALSE             FALSE            
10      1333 1959-04-27    1971-05-23  1955-05-08   NA         FALSE             FALSE  

0
投票

几个月前,我问了这个问题。这就是答案:

Count rows matching a criteria relative to current row

© www.soinside.com 2019 - 2024. All rights reserved.