我有以下提示:
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重叠的任务。我应该怎么做?上面的小标题只是更大的小标题的快照。
答案 0 :(得分: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