192  :interval(sld102)

library(tidyverse)
library(lubridate)

さて、ここまでは、ある時刻は日付に対して、一定の時間経過(物理的:duration カレンダー:period)を足したり引いたりする話をしてきましたが、時間を扱う場合に、「時間の幅」と「時間の幅」を比較したいようなケースがあります。

例えば、ある薬1の投与期間が2000年1月1日から2月1日までで、薬2の投与期間が2000年1月10日から2月10日までであった場合に、この二つの期間が重複しているかを調べたいようなケースだと

m1s <- as_date("2000-1-1")
m1e <- as_date("2000-2-1")

m2s <- as_date("2000-1-1")
m2e <- as_date("2000-3-1")

m1s ——— m1e m2s———–m2e

m2s ——— m2e m1s ———-m1e

という形で、どちらが先に来るか等の場合わけを含めて考えないといけません。

こういう場合は、intervalという「幅をもった」型を使いましょう。

int1 <- interval(m1s, m1e)
int2 <- interval(m2s, m2e)

int1
[1] 2000-01-01 UTC--2000-02-01 UTC
int2
[1] 2000-01-01 UTC--2000-03-01 UTC

このような形にすることで、二つの期間が重なっているか?

int_overlaps(int1,int2)
[1] TRUE

二つの期間の開始時期が一致しているか

int_aligns(int1,int2)
[1] TRUE

等のTRUE・FALSEが簡単に集計できます。

以上、簡単ですがIntervalの解説でした。

次の動画からはここまでの知識を利用して時間の集計を行っていきます。