Rで解析:NA値の取り扱いが楽々「mde」パッケージ

Rの解析に役に立つ記事
スポンサーリンク

行または列の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  

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

タイトルとURLをコピーしました