私はオーバーラッピング間隔を見つけようとしていて、dplyr::left_join()
でインターバルデータに参加することにしました。その結果、lubridate::int_overlaps()
のインターバルと同じIDで他のインターバルを比較することができました。間隔を置いて2つのデータフレームを結合するのは正しくありませんか?
left_join()
の動作は次のとおりです。 3行tibble 9を持つ行を形成するように交差して2 tibbles:
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
そしてここでは、同じコードが間隔でどのように動作するかです。私は9行になりますが、上記のように行が交差しません:
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
これは予期しないと思いますが、何か不足している可能性があります。それともバグですか?
私はlubridate 1.7.1,tibble 1.3.4およびdplyr 0.7.4を使用しています。しかし
> AA <- tibble(a = rep("a", 3), b = rep(make_date(2001) %--% make_date(2002), 3))
> class(AA$b)
[1] "Interval"
attr(,"package")
[1] "lubridate"
> AA
Error in round_x - lhs :
Arithmetic operators undefined for 'Interval' and 'Interval' classes:
convert one to numeric or a matching time-span class.
:
を報告しました。 – pasipasi