データを指定した条件で検証し、その後の解析に役に立つ情報を取得できるパッケージの紹介です。抽出条件は数字だけでなく、文字列でも指定可能です。
パッケージバージョンは1.1.1。実行コマンドはwindows 11のR version 4.1.3で確認しています。
パッケージのインストール
下記、コマンドを実行してください。
#パッケージのインストール
install.packages("validate")
実行コマンド
詳細はコメント、パッケージのヘルプを確認してください。
#パッケージの読み込み
library("validate")
###データ例の作成#####
#tidyverseパッケージがなければインストール
if(!require("tidyverse", quietly = TRUE)){
install.packages("tidyverse");require("tidyverse")
}
#日付データの作成に便利:lubridateパッケージがなければインストール
if(!require("lubridate", quietly = TRUE)){
install.packages("lubridate");require("lubridate")
}
set.seed(1234)
#lubridate::ymd;locale="C", tz="Asia/Tokyo"を設定するのがポイント
#lubridate::wday;locale = "English_Japan.932"を設定するのがポイント
TestData <- tibble(Date = seq(lubridate::ymd("2021-01-01", locale = "C",
tz = "Asia/Tokyo"),
lubridate::ymd("2022-03-24", locale = "C",
tz = "Asia/Tokyo"),
by = "1 day")) %>%
mutate(Data_1 = sample(c(1:30), length(Date), replace = TRUE),
Data_2 = sample(c(1:30), length(Date), replace = TRUE),
Char_Data = sample(c("A", "B", "NO"), length(Date), replace = TRUE),
#Dateを基準に曜日を入手:wdayコマンド
Day_Type = lubridate::wday(Date, label = TRUE, abbr = FALSE,
locale = "English_Japan.932")) %>%
#Saturday,SundayをWEEKEND,その他をWEEKDAYに変換
mutate(Day_Type = if_else((Day_Type == "Saturday"| Day_Type == "Sunday"),
"WEEKEND", "WEEKDAY"))
########
#データの検証条件を指定:validatorコマンド
TestRules <- validator(Date > "2021-12-01",
Data_1 >= 15,
Day_Type == "WEEKDAY")
#データを検証:confrontコマンド
#validatorコマンドの結果を指定する
GetData <- confront(dat = TestData, x = TestRules)
##対象データの検証の要約
#summary(GetData)
# name items passes fails nNA error warning expression
#1 V1 448 113 335 0 FALSE FALSE Date > "2021-12-01"
#2 V2 448 247 201 0 FALSE FALSE Data_1 - 15 >= -1e-08
#3 V3 448 448 0 0 FALSE FALSE Day_Type == "WEEKDAY"
##対象データの検証結果をプロットで確認
#plot(GetData)
#検証条件に合わないデータを取得:violatingコマンド
#最後の検証条件は適応されない
GetNotData <- violating(TestData, y = TestRules)
##確認
GetNotData
# A tibble: 382 x 5
# Date Data_1 Data_2 Char_Data Day_Type
# <dttm> <int> <int> <chr> <chr>
#1 2021-01-01 00:00:00 28 14 B WEEKDAY
#2 2021-01-02 00:00:00 16 9 NO WEEKDAY
#3 2021-01-03 00:00:00 26 19 NO WEEKDAY
#4 2021-01-04 00:00:00 22 1 B WEEKDAY
#5 2021-01-05 00:00:00 5 4 NO WEEKDAY
#6 2021-01-06 00:00:00 12 24 NO WEEKDAY
#7 2021-01-07 00:00:00 15 14 B WEEKDAY
#8 2021-01-08 00:00:00 9 10 A WEEKDAY
#9 2021-01-09 00:00:00 5 24 B WEEKDAY
#10 2021-01-10 00:00:00 6 13 NO WEEKDAY
# ... with 372 more rows
出力例
・対象データの検証結果をプロットで確認

少しでも、あなたの解析が楽になりますように!!