DS講座 tidyverse tidyverse講座

【R前処理講座29】{forcats}:ファクター処理【tidyverse】

こんにちは,shun(@datasciencemore)です!!

今回は,tidyverseのコアパッケージ,7番目の{forcats}についてやっていきます.
{forcats}は,ファクター処理をするうえで非常に役に立つパッケージがです.
今までと同様に,ファクター処理とはどのような処理なのかからじっくり見ていきましょう.

0.{forcats}ってなに??

{forcats}ってなんですか??
{forcats}はファクター処理に特化したパッケージのことだよ.

ファクターでは,普通に文字列にはない水準という概念があることは覚えているかな?

その水準があるために,色々な処理をする必要があるんだ.

今回は,以下のように架空の企業の人事データを作成します.

name:名前
group:企業
age:年齢

 

name列とgroup列がファクターですね.
それぞれのファクターは次のとおりです.

こんな感じで普通にfactorを使用してファクターを作成すると,水準の順番が辞書順になります.
{forcats}は主に以下の用途で使用します.

  1. 水準の順番の変更
  2. 水準の値の変更

それぞれの使い方について,詳細にみていきましょう.

1.水準の順番の変更

1.1.出現順にする. fct_inorder

dfのgroup列はファクターで,水準が"hinata", "nogi", "sakura"の順番になっていますね.
この水準の順番をデータの出現順("nogi", "sakura", "hinata")にしたい場合,fct_inorderを使用します.

 

1.2.度数順にする. fct_infreq

今度は,出てきた度数に応じて,水準を変えてみましょう.
fct_infreqを使用すると,度数が大きい順に水準を変えてくれます.

 

1.3.逆順にする. fct_rev 

fct_revを使用すると,水準を逆順にすることができます.

元の水準は,Levels: hinata nogi sakuraだったので,確かに逆順になっていますね.

1.4.シフトする. fct_shift

fct_shiftで,水準をシフトさせることができます. 引数nでどれくらいシフトさせるかを指定できます.
nが正だと左に,負だと右にシフトします.

 

1.5.指定する. fct_relevel

fct_relevelで指定したとおりに水準の順番を変更できます.

なお,全部指定する必要はなく,指定しなかった要素は後ろに回されます.

 

1.6.他変数によるソート fct_reorder

他の変数の値によって,水準をソートします. 例えば,name列のファクターの水準をage列の小さい順にしたいときは,次のようになります.

 

これは,グラフにしたときにファクターの水準を変えたいときに便利です.
例えば,nameとageの散布図を描くと次のようになります.

 

全体の傾向がよくつかめませんね.
これは,nameのファクターが辞書順であることが原因です.
グラフでは,ファクターの水準の順番で並ぶのでこのようになるのです.
fct_reorderを使って,水準の順番を変えると以下のようになります.

 

 

 

nameのファクターの水準がageの順番になったことで,傾向が見やすくなりました.
このような感じでfct_reorderは可視化のときによく使うことが多いです.

2.水準の値の変更

今度は,水準の順番ではなく,値の変更について考えてみましょう.

2.1.指定する. fct_recode

fct_recodeで指定したとおりに水準の値を変更できます.

 

 

2.2.まとめる. fct_collapse

今度は水準をまとめることを考えましょう.
sakuraとhinataが合併して,新しい企業keyakiになったとしましょう.
そのような場合,元のsakuraとhinataをまとめてkeyakiにしたいと考えるでしょう.
このように別々の水準を1つの水準にまとめるときに便利なのがfct_collapseです.

 

2.3.度数の少ない水準をまとめる. fct_lump

groupの度数を見てみましょう.

 

sakuraが7に対して,hinataが3,nogiが2と少ないです.
この少ない複数のグループを1つにするときに使用する関数がfct_lumpです.
このような感じで使います.

 

まとめ

今回はファクター処理の{forcats}の使い方として,以下の2点を勉強しました.

  1. 水準の順番の変更
  2. 水準の列の変更

ちなみにここで扱った関数はごく一部です.
かなりマニアックな関数もあるので興味がある方はぜひ調べてみてください.
正直,水準を変更することはあまりないと思います.
ただ,いざ変えたくなった時に{forcats}の存在を知っているかどうかの違いは大きいです.
もし水準を変更する必要が出てきたら,まずはこのページを参考に見てくださいね.

それじゃ,お疲れ様でした!!

-DS講座, tidyverse, tidyverse講座