本文へスキップ
からだにいいもの

Rのトピックスを中心に『まだ、まだ、知らない、役に立つ情報?』を発信します。

Rで解析:データを指定した条件で検証「validate」パッケージ

データを指定した条件で検証し、その後の解析に役に立つ情報を取得できるパッケージの紹介です。抽出条件は数字だけでなく、文字列でも指定可能です。

パッケージバージョンは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

出力例

・対象データの検証結果をプロットで確認

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

このコードの続きをAIに聞く

スポンサーリンク
Prices and shipping availability may change. Please refer to the product page at time of purchase.
Content displayed on this site is provided by Amazon and may be updated or removed.
Amazon Associate, karada-good earns income through qualifying sales.