行または列のNA値の出現数でデータを除外するだけでなく、指定値をNA値へ変換するなどの作業が簡単になるパッケージの紹介です。意外とNA値の取り扱いは面倒なので本パッケージを利用してみてはいかがでしょうか。
パッケージのバージョンは0.3.2。実行コマンドはwindows 11のR version 4.1.2で確認しています。
パッケージのインストール
下記コマンドを実行してください。
#パッケージのインストール install.packages("mde")
実行コマンド
詳細はコメント、パッケージヘルプを確認してください。
#パッケージの読み込み library("mde") ###データ例の作成##### #欠損値を999と想定 #tidyverseパッケージがなければインストール if(!require("tidyverse", quietly = TRUE)){ install.packages("tidyverse");require("tidyverse") } set.seed(1234) n <- 50 TestData <- tibble(Group = rep(paste0("Group", 1:5), time = 10), Num_Data = sample(c(1:3, NA, 999), n, replace = TRUE), Char_Data = sample(c("からだ", "999", "n/a", "いいもの"), n, replace = TRUE), Date = sample(c("22.02.15", 999, NA), n, replace = TRUE)) #確認 TestData # A tibble: 50 x 4 Group Num_Data Char_Data Date <chr> <dbl> <chr> <chr> 1 Group1 NA 999 NA 2 Group2 2 からだ 999 3 Group3 999 いいもの 22.02.15 4 Group4 NA 999 999 5 Group5 1 n/a 999 6 Group1 999 999 999 7 Group2 NA いいもの 22.02.15 8 Group3 2 いいもの NA 9 Group4 2 からだ NA 10 Group5 NA n/a 22.02.15 # ... with 40 more rows ######### #NA数をカウント:get_na_countsコマンド #データのグループ列:grouping_colsオプション #除外列:exclude_colsオプション get_na_counts(TestData, grouping_cols = "Group") # A tibble: 5 x 4 Group Num_Data Char_Data Date <chr> <int> <int> <int> 1 Group1 3 0 4 2 Group2 4 0 1 3 Group3 1 0 2 4 Group4 2 0 7 5 Group5 1 0 5 #指定した文字列をNAに置換:recode_as_naコマンド #対象列を指定:subset_colsオプション ReNAData <- recode_as_na(TestData, value = c("n/a", 999), subset_cols = NULL) #確認 get_na_counts(ReNAData, grouping_cols = "Group") # A tibble: 5 x 4 Group Num_Data Char_Data Date <chr> <int> <int> <int> 1 Group1 5 7 7 2 Group2 6 3 7 3 Group3 3 2 5 4 Group4 3 5 9 5 Group5 2 8 8 #設定基準で列を除去:drop_na_ifコマンド #基準を設定:signオプション;greater_than("gt"),equal("eq"),less_than("lt"),equal_to("eq") #基準値(%)を設定:percent_naオプション Test <- drop_na_if(TestData, sign = "gteq", percent_na = 30, keep_columns = NULL) #確認 get_na_counts(Test, grouping_cols = "Group") # A tibble: 5 x 3 Group Num_Data Char_Data <chr> <int> <int> 1 Group1 3 0 2 Group2 4 0 3 Group3 1 0 4 Group4 2 0 5 Group5 1 0 #設定基準で行を除去:drop_na_ifコマンド #データ例では対象が3列内,NAを含む列はNum_Data,Dateのみでvalueの最大値は2となる Test <- drop_row_if(TestData, sign = "gteq", type = "count" , value = 2) get_na_counts(Test, grouping_cols = "Group") # A tibble: 5 x 4 Group Num_Data Char_Data Date <chr> <int> <int> <int> 1 Group1 2 0 3 2 Group2 4 0 1 3 Group3 0 0 1 4 Group4 2 0 7 5 Group5 1 0 5 #データのNA(欠損値)などの状況を確認:na_summaryコマンド #並び替えの基準列を指定:sort_byオプション #並び順を指定:descendingオプション;昇順:FALSE/降順:TRUE #データのグループ列:grouping_colsオプション #除外列:exclude_colsオプション #文字列で対象を指定:pattern_typeオプション:"starts_with","contains","regex",NULL; #pattern,regex_kindと一緒に使う,exclude_colsとは同時不可 #文字列を指定:patternオプション #pattern_type,patternで指定した内容を含めるか:regex_kindオプション;"inclusion"/"exclusion" na_summary(TestData, sort_by = "Group", descending = FALSE, grouping_cols = c("Group", "Char_Data"), exclude_cols = "Date", #pattern_type = "contains", pattern = "Data", regex_kind = "inclusion", ) # A tibble: 19 x 7 Group Char_Data variable missing complete percent_complete percent_missing <chr> <chr> <chr> <dbl> <dbl> <dbl> <dbl> 1 Group1 999 Num_Data 1 3 75 25 2 Group1 n/a Num_Data 2 1 33.3 66.7 3 Group1 いいもの Num_Data 0 2 100 0 4 Group1 からだ Num_Data 0 1 100 0 5 Group2 999 Num_Data 0 2 100 0 6 Group2 n/a Num_Data 1 0 0 100 7 Group2 いいもの Num_Data 2 1 33.3 66.7 8 Group2 からだ Num_Data 1 3 75 25 9 Group3 999 Num_Data 0 1 100 0 10 Group3 n/a Num_Data 0 1 100 0 11 Group3 いいもの Num_Data 0 3 100 0 12 Group3 からだ Num_Data 1 4 80 20 13 Group4 999 Num_Data 1 3 75 25 14 Group4 n/a Num_Data 1 0 0 100 15 Group4 いいもの Num_Data 0 3 100 0 16 Group4 からだ Num_Data 0 2 100 0 17 Group5 999 Num_Data 0 4 100 0 18 Group5 n/a Num_Data 1 3 75 25 19 Group5 いいもの Num_Data 0 2 100 0
少しでも、あなたの解析が楽になりますように!!