数字、日付データを始点(含抱)と終点(排他)を持つベクトルでデータを操作するパッケージの紹介です。パッケージには始点(含抱)と終点(排他)を持つベクトルを作成するコマンド、作成した範囲ベクトルを操作するコマンド、データ範囲の重複の位置や内容、データが範囲に含まれているか、その個数を確認するコマンドなどが収録されています。
コマンドを理解してしまえば「dplyr::mutate」コマンドなどと組み合わせて使用することでデータの整理が楽になると思います。
パッケージのバージョンは0.2.0。windows 11のR version 4.3.3で確認しています。
パッケージのインストール
下記コマンドを実行してください。
# パッケージのインストール
install.packages("ivs")
コマンドの紹介
詳細はコマンド、パッケージのヘルプを確認してください。
# パッケージの読み込み
library("ivs")
# 範囲の始点(含抱),終点(排他)を持つベクトルを作成:ivコマンド
iv(start = 1:5, end = 10:14)
# <iv<integer>[5]>
# [1] [1, 10) [2, 11) [3, 12) [4, 13) [5, 14)
# 例_1
iv(start = as.Date("2024-06-17") + 0:2, end = as.Date("2024-06-19") + 0:2)
<iv<date>[3]>
[1] [2024-06-17, 2024-06-19) [2024-06-18, 2024-06-20) [2024-06-19, 2024-06-21)
# 例_2
iv(start = c(as.Date("2024-06-17"), as.Date("2024-06-19")),
end = c(as.Date("2024-06-18"), as.Date("2024-06-20")))
<iv<date>[2]>
[1] [2024-06-17, 2024-06-18) [2024-06-19, 2024-06-20)
# 範囲の始点(含抱),終点(排他)を持つ組み合わせのベクトルを作成:iv_pairsコマンド
iv_pairs(c(1, 5), c(2, 3), c(6, 10))
<iv<double>[3]>
[1] [1, 5) [2, 3) [6, 10)
# 範囲の重複の位置を確認する:iv_locate_overlapsコマンド
# 比較データはiv classで指定します
# needlesオプションの3番目c(6 ,10)の範囲がhaystackオプションの1番目c(7, 8)と重複
Iv_overlaps_result <- iv_locate_overlaps(needles = iv_pairs(c(1, 5), c(2, 3), c(6, 10)),
haystack = iv_pairs(c(7, 8), c(12, 13), c(16, 20)))
# 確認
Iv_overlaps_result
needles haystack
1 1 NA
2 2 NA
3 3 1
# 範囲の重複の内容を確認する:iv_alignコマンド
iv_align(needles = iv_pairs(c(1, 5), c(2, 3), c(6, 10)),
haystack = iv_pairs(c(7, 8), c(12, 13), c(16, 20)),
locations = Iv_overlaps_result)
# 確認
needles haystack
1 [1, 5) [NA, NA)
2 [2, 3) [NA, NA)
3 [6, 10) [7, 8)
# 範囲の重複をTRUE/FALSEで確認する:iv_overlapsコマンド
iv_overlaps(needles = iv_pairs(c(1, 5), c(2, 3), c(6, 10)),
haystack = iv_pairs(c(7, 8), c(12, 13), c(16, 20)))
[1] FALSE FALSE TRUE
# needlesの範囲がどのhaystackの範囲の前にあるかを確認:iv_locate_precedesコマンド
# 結果の表示方法を指定:multipleオプション;"all","any","first","last"
iv_locate_precedes(needles = iv_pairs(c(1, 5), c(12, 13)),
haystack = iv_pairs(c(7, 8), c(16, 20)),
multiple = "all")
needles haystack
1 1 1
2 1 2
3 2 2
# needlesがhaystackの範囲に含まれるかをTRUE/FALSEで確認する:iv_betweenコマンド
iv_between(needles = c(5, 500),
haystack = iv(450, 1000))
[1] FALSE TRUE
## 例_1
iv_between(needles = c(as.Date("2024-06-18"),
as.Date("2024-06-20"),
as.Date("2024-05-18")),
haystack = iv(start = as.Date("2024-06-17") + 0:2,
end = as.Date("2024-06-19") + 0:2))
[1] TRUE TRUE FALSE
# needlesがhaystackの範囲に含まれるかを確認する:iv_locate_betweenコマンド
between_result <- iv_locate_between(needles = c(as.Date("2024-06-18"),
as.Date("2024-06-20"),
as.Date("2024-05-18")),
haystack = iv(start = as.Date("2024-06-17") + 0:2,
end = as.Date("2024-06-19") + 0:2))
## 結果をiv_alignコマンドに適応します
iv_align(needles = c(as.Date("2024-06-18"),
as.Date("2024-06-20"),
as.Date("2024-05-18")),
haystack = iv(start = as.Date("2024-06-17") + 0:2,
end = as.Date("2024-06-19") + 0:2),
locations = between_result)
needles haystack
1 2024-06-18 [2024-06-17, 2024-06-19)
2 2024-06-18 [2024-06-18, 2024-06-20)
3 2024-06-20 [2024-06-19, 2024-06-21)
4 2024-05-18 [NA, NA)
# 各haystackの範囲に各needlesの値が何度収まるか:iv_count_betweenコマンド
iv_count_between(needles = c(as.Date("2024-06-18"),
as.Date("2024-06-20"),
as.Date("2024-05-18")),
haystack = iv(start = as.Date("2024-06-17") + 0:2,
end = as.Date("2024-06-19") + 0:2))
# 解説_haystack範囲[1, 5),[4, 8)に3のneedlesが入るのは[1, 5)で結果は1
# iv_count_between(needles = c(3),
# haystack = iv(start = c(1, 4),
# end = c(5, 8)))
### 以降,使用するデータ例 #####
Test <- iv(start = as.Date("2024-06-17") + 0:2, end = as.Date("2024-06-19") + 0:2)
# 確認
Test
<iv<date>[3]>
[1] [2024-06-17, 2024-06-19) [2024-06-18, 2024-06-20) [2024-06-19, 2024-06-21)
########
# 範囲の始点を取得する:iv_startコマンド
iv_start(Test)
[1] "2024-06-17" "2024-06-18" "2024-06-19"
# 範囲の終点を取得する:iv_endコマンド
iv_end(Test)
[1] "2024-06-19" "2024-06-20" "2024-06-21"
# 範囲の重複をまとめて一つの範囲にする:iv_groupsコマンド
# Testの範囲は3つあるが実質の範囲は2024-06-17から2024-06-21まで
iv_groups(Test)
[1] [2024-06-17, 2024-06-21)
# 範囲の重複を重複範囲で分割する:iv_splitsコマンド
iv_splits(Test)
[1] [2024-06-17, 2024-06-18) [2024-06-18, 2024-06-19) [2024-06-19, 2024-06-20) [2024-06-20, 2024-06-21)
少しでも、あなたの解析が楽になりますように!!