行または列の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
少しでも、あなたの解析が楽になりますように!!