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),
                   #&#12300;&#12363;&#12301;&#12399;&#21322;&#35282;&#12473;&#12506;&#12540;&#12473;&#12434;&#20808;&#38957;&#12395;&#20184;&#19982;
                   c_Data_3 = sample(c(" &#12363;", "NA", " ", "&#12360;&#12396;&#12360;"),
                                   n, replace = TRUE),
                   Date = sample(c(20220210, "22.02.10", " "), n, replace = TRUE))
#&#30906;&#35469;
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"    " &#12363;"    " "       
2 Group4 " "    "1"    "&#12360;&#12396;&#12360;" "22.02.10"
3 Group2 "3"    " "    " "      "20220210"
4 Group2 "3"    "1"    "&#12360;&#12396;&#12360;" "22.02.10"
5 Group1 "1"    "1"    " "      "22.02.10"
6 Group4 "2"    "2"    " &#12363;"    "22.02.10"
7 Group3 "1"    "1"    "NA"     "20220210"
8 Group1 "2"    "3"    "NA"     " "       
9 Group1 "2"    "2"    " "      " "       
10 Group2 "3"    "3"    "&#12360;&#12396;&#12360;" "20220210"
# ... with 20 more rows
########

#&#23550;&#35937;&#25991;&#23383;&#12434;NA&#12395;&#32622;&#25563;:make_na&#12467;&#12510;&#12531;&#12489;
#&#23550;&#35937;&#12434;&#35373;&#23450;:vec&#12458;&#12503;&#12471;&#12519;&#12531;
#&#21021;&#26399;&#20516;:c("-", "", " ", "null", "NA", "NA_")
TestData %>% 
  make_na(vec = c("-", "", " ", "null", "NA", "NA_", "&#12360;&#12396;&#12360;"))
# A tibble: 30 x 5
  Group  Data_1 a_Data_2 c_Data_3 Date    
  <chr>  <chr>  <chr>  <chr>  <chr>   
1 Group4 3      3      " &#12363;"  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      " &#12363;"  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

#&#21322;&#35282;&#12473;&#12506;&#12540;&#12473;&#12434;&#38500;&#21435;:remove_whitespace&#12467;&#12510;&#12531;&#12489;
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"    "&#12363;"     ""        
2 Group4 ""     "1"    "&#12360;&#12396;&#12360;" "22.02.10"
3 Group2 "3"    ""     ""       "20220210"
4 Group2 "3"    "1"    "&#12360;&#12396;&#12360;" "22.02.10"
5 Group1 "1"    "1"    ""       "22.02.10"
6 Group4 "2"    "2"    "&#12363;"     "22.02.10"
7 Group3 "1"    "1"    "NA"     "20220210"
8 Group1 "2"    "3"    "NA"     ""        
9 Group1 "2"    "2"    ""       ""        
10 Group2 "3"    "3"    "&#12360;&#12396;&#12360;" "20220210"
# ... with 20 more rows

#&#26085;&#20184;&#12487;&#12540;&#12479;&#12434;XXXX-XX-XX&#12398;ymd&#24418;&#24335;&#12395;&#22793;&#25563;:&#12467;&#12510;&#12531;&#12489;
#&#12487;&#12540;&#12479;&#20363;&#12391;&#12399;Date&#12395;NA&#12364;9&#12354;&#12427;&#12398;&#12391;&#12456;&#12521;&#12540;&#12391;&#34920;&#31034;&#12373;&#12428;&#12427;
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"    " &#12363;"    NA        
2 Group4 " "    "1"    "&#12360;&#12396;&#12360;" 2022-02-10
3 Group2 "3"    " "    " "      2022-02-10
4 Group2 "3"    "1"    "&#12360;&#12396;&#12360;" 2022-02-10
5 Group1 "1"    "1"    " "      2022-02-10
6 Group4 "2"    "2"    " &#12363;"    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"    "&#12360;&#12396;&#12360;" 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.

#&#12450;&#12523;&#12501;&#12449;&#12505;&#12483;&#12488;&#38918;&#12391;&#21015;&#21517;&#12434;&#20006;&#12403;&#26367;&#12360;:relocate_all&#12467;&#12510;&#12531;&#12489;
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"      " &#12363;"    "3"    " "        Group4
2 "1"      "&#12360;&#12396;&#12360;" " "    "22.02.10" Group4
3 " "      " "      "3"    "20220210" Group2
4 "1"      "&#12360;&#12396;&#12360;" "3"    "22.02.10" Group2
5 "1"      " "      "1"    "22.02.10" Group1
6 "2"      " &#12363;"    "2"    "22.02.10" Group4
7 "1"      "NA"     "1"    "20220210" Group3
8 "3"      "NA"     "2"    " "        Group1
9 "2"      " "      "2"    " "        Group1
10 "3"      "&#12360;&#12396;&#12360;" "3"    "20220210" Group2
# ... with 20 more rows

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

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