Próbuję znaleźć nakładających się interwałów i postanowiłem dołączyć do siebie dane przedziału z dplyr::left_join()
, tak aby móc porównać interwały z lubridate::int_overlaps()
do każdego innego interwału przez ten sam identyfikator.Łączenie dwóch ramek danych z przerwami działa niepoprawnie?
Oto, jak się spodziewam, aby zachowywać się left_join()
. Dwie tibbles z trzech rzędach tworząc krzyż tibble z 9 rzędów:
library(tidyverse)
tibble(a = rep("a", 3), b = rep(1, 3)) %>%
left_join(tibble(a = rep("a", 3), c = rep(2, 3)))
Joining, by = "a"
# A tibble: 9 x 3
a b c
<chr> <dbl> <dbl>
1 a 1 2
2 a 1 2
3 a 1 2
4 a 1 2
5 a 1 2
6 a 1 2
7 a 1 2
8 a 1 2
9 a 1 2
A oto jak ten sam kod zachowuje się z przerwami. Mam dziewięć rzędów ale wiersze nie krzyżują jak robią powyżej:
tibble(a = rep("a", 3), b = rep(make_date(2001) %--% make_date(2002), 3)) %>%
left_join(tibble(a = rep("a", 3), c = rep(make_date(2002) %--% make_date(2003))))
Joining, by = "a"
# A tibble: 9 x 3
a b c
<chr> <S4: Interval> <S4: Interval>
1 a 2001-01-01 UTC--2002-01-01 UTC 2002-01-01 UTC--2003-01-01 UTC
2 a 2001-01-01 UTC--2002-01-01 UTC 2002-01-01 UTC--2003-01-01 UTC
3 a 2001-01-01 UTC--2002-01-01 UTC 2002-01-01 UTC--2003-01-01 UTC
4 a NA--NA NA--NA
5 a NA--NA NA--NA
6 a NA--NA NA--NA
7 a NA--NA NA--NA
8 a NA--NA NA--NA
9 a NA--NA NA--NA
Myślę, że to nieoczekiwane, ale może być czegoś brakuje? Czy to błąd?
Używam lubridate 1.7.1, tibble 1.3.4 i dplyr 0.7.4.
mogę obejść ten problem przez nie konwersji daty rozpoczęcia i zakończenia do odstępach przed przystąpieniem. – pasipasi