Rで解析:データマイニングの初手に有効かも「framecleaner」パッケージ

Rの解析に役に立つ記事

データを読み込んだ時に全角、半角のスペースや日付表記など表記の揺れ幅を修正することがあります。そんな修正作業が少し楽になるかもしれないパッケージの紹介です。対象文字をNAに置換、半角スペースを除去、日付データをXXXX-XX-XXのymd形式に変換などのコマンドが収録されています。

パッケージのバージョンは0.2.0。実行コマンドはwindows 11のR version 4.1.2で確認しています。

スポンサーリンク
スポンサーリンク

パッケージのインストール

下記コマンドを実行してください。

#パッケージのインストール
install.packages("framecleaner")

実行コマンド

詳細はコメント、パッケージヘルプを確認してください。

#パッケージの読み込み
library("framecleaner")

###データ例の作成#####
#tidyverseパッケージがなければインストール
if(!require("tidyverse", quietly = TRUE)){
  install.packages("tidyverse");require("tidyverse")
}
set.seed(1234)
n <- 30
TestData <- tibble(Group = sample(paste0("Group", 1:4), n,
                                  replace = TRUE),
                   Data_1 = sample(c(1:3, " "), n, replace = TRUE),
                   a_Data_2 = sample(c(1:3, NA, " "), n, replace = TRUE),
                   #「か」は半角スペースを先頭に付与
                   c_Data_3 = sample(c(" か", "NA", " ", "えぬえ"),
                                   n, replace = TRUE),
                   Date = sample(c(20220210, "22.02.10", " "), n, replace = TRUE))
#確認
TestData
# A tibble: 30 x 5
  Group  Data_1 a_Data_2 c_Data_3   Date      
  <chr>  <chr>  <chr>  <chr>    <chr>     
1 Group4 "3"    "3"    " か"    " "       
2 Group4 " "    "1"    "えぬえ" "22.02.10"
3 Group2 "3"    " "    " "      "20220210"
4 Group2 "3"    "1"    "えぬえ" "22.02.10"
5 Group1 "1"    "1"    " "      "22.02.10"
6 Group4 "2"    "2"    " か"    "22.02.10"
7 Group3 "1"    "1"    "NA"     "20220210"
8 Group1 "2"    "3"    "NA"     " "       
9 Group1 "2"    "2"    " "      " "       
10 Group2 "3"    "3"    "えぬえ" "20220210"
# ... with 20 more rows
########

#対象文字をNAに置換:make_naコマンド
#対象を設定:vecオプション
#初期値:c("-", "", " ", "null", "NA", "NA_")
TestData %>% 
  make_na(vec = c("-", "", " ", "null", "NA", "NA_", "えぬえ"))
# A tibble: 30 x 5
  Group  Data_1 a_Data_2 c_Data_3 Date    
  <chr>  <chr>  <chr>  <chr>  <chr>   
1 Group4 3      3      " か"  NA      
2 Group4 NA     1       NA    22.02.10
3 Group2 3      NA      NA    20220210
4 Group2 3      1       NA    22.02.10
5 Group1 1      1       NA    22.02.10
6 Group4 2      2      " か"  22.02.10
7 Group3 1      1       NA    20220210
8 Group1 2      3       NA    NA      
9 Group1 2      2       NA    NA      
10 Group2 3      3       NA    20220210
# ... with 20 more rows

#半角スペースを除去:remove_whitespaceコマンド
TestData %>% 
  remove_whitespace()
# A tibble: 30 x 5
  Group  Data_1 a_Data_2 c_Data_3   Date      
  <chr>  <chr>  <chr>  <chr>    <chr>     
1 Group4 "3"    "3"    "か"     ""        
2 Group4 ""     "1"    "えぬえ" "22.02.10"
3 Group2 "3"    ""     ""       "20220210"
4 Group2 "3"    "1"    "えぬえ" "22.02.10"
5 Group1 "1"    "1"    ""       "22.02.10"
6 Group4 "2"    "2"    "か"     "22.02.10"
7 Group3 "1"    "1"    "NA"     "20220210"
8 Group1 "2"    "3"    "NA"     ""        
9 Group1 "2"    "2"    ""       ""        
10 Group2 "3"    "3"    "えぬえ" "20220210"
# ... with 20 more rows

#日付データをXXXX-XX-XXのymd形式に変換:コマンド
#データ例ではDateにNAが9あるのでエラーで表示される
TestData %>% 
  set_date(Date)
# A tibble: 30 x 5
  Group  Data_1 a_Data_2 c_Data_3   Date      
  <chr>  <chr>  <chr>  <chr>    <date>    
1 Group4 "3"    "3"    " か"    NA        
2 Group4 " "    "1"    "えぬえ" 2022-02-10
3 Group2 "3"    " "    " "      2022-02-10
4 Group2 "3"    "1"    "えぬえ" 2022-02-10
5 Group1 "1"    "1"    " "      2022-02-10
6 Group4 "2"    "2"    " か"    2022-02-10
7 Group3 "1"    "1"    "NA"     2022-02-10
8 Group1 "2"    "3"    "NA"     NA        
9 Group1 "2"    "2"    " "      NA        
10 Group2 "3"    "3"    "えぬえ" 2022-02-10
# ... with 20 more rows
Warning message:
  Problem with `mutate()` input `..1`.
i `..1 = dplyr::across(tidyselect::any_of(nms), .fns = ~date_fn(.))`.
i  9 failed to parse.

#アルファベット順で列名を並び替え:relocate_allコマンド
TestData %>% 
  relocate_all()
# A tibble: 30 x 5
  a_Data_2 c_Data_3 Data_1 Date       Group 
  <chr>    <chr>    <chr>  <chr>      <chr> 
1 "3"      " か"    "3"    " "        Group4
2 "1"      "えぬえ" " "    "22.02.10" Group4
3 " "      " "      "3"    "20220210" Group2
4 "1"      "えぬえ" "3"    "22.02.10" Group2
5 "1"      " "      "1"    "22.02.10" Group1
6 "2"      " か"    "2"    "22.02.10" Group4
7 "1"      "NA"     "1"    "20220210" Group3
8 "3"      "NA"     "2"    " "        Group1
9 "2"      " "      "2"    " "        Group1
10 "3"      "えぬえ" "3"    "20220210" Group2
# ... with 20 more rows

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

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