列名を綺麗にしたいとき

janitor::clean_names という関数がとても便利。

  • 列名はすべて小文字に変更
  • 列名はすべてスネークケースに変更
  • 列名に含まれる空白は _ に置換
  • 列名に含まれる邪魔な文字は削除(例:ウムラウト@() など)
  • 列名に含まれる %percent に変更
  • 列名が同じものは {列名}_{通し番号} に変更

などなどの機能。前処理で活躍する。

ベクトルには janitor::make_clean_names()

pacman::p_load(janitor)

# ベクトル
test_names <- c('firstName',
                'SecondName',
                'THIRD_NAME',
                'REPEAT VALUE', 
                'REPEAT VALUE', 
                '',
                '',
                'ábc@!*', 
                '% successful (2009)')

test_names

test_names %>% 
  janitor::make_clean_names() 

修正前と修正後

> test_names 
[1] "firstName"           "SecondName"          "THIRD_NAME"         
[4] "REPEAT VALUE"        "REPEAT VALUE"        ""                   
[7] ""                    "abc@!*"              "% successful (2009)"

> test_names %>% 
+     janitor::make_clean_names()
[1] "first_name"              "second_name"             "third_name"             
[4] "repeat_value"            "repeat_value_2"          "x"                      
[7] "x_2"                     "abc"                     "percent_successful_2009"

ええがな・・・

データフレームには janitor::clean_names()

# データフレーム
test_df <- as.data.frame(matrix(ncol = length(test_names)))
colnames(test_df) <- test_names

test_df

test_df %>% 
  janitor::clean_names()

修正前と修正後

> test_df
  firstName SecondName THIRD_NAME REPEAT VALUE REPEAT VALUE       abc@!*
1        NA         NA         NA           NA           NA NA NA     NA
  % successful (2009)
1                  NA

> test_df %>% 
+     janitor::clean_names()
  first_name second_name third_name repeat_value repeat_value_2  x x_2 abc
1         NA          NA         NA           NA             NA NA  NA  NA
  percent_successful_2009
1                      NA

ごっつええやん・・・