forcatsを使用して棒グラフとボックスを整列して印刷


サンプルデータ:https://www.kaggle.com/prathamtripathi/drug-classification
Rは、操作可能なファクタ型変数レベルのパッケージforcesを提供する.(tidyverseパッケージに含まれる)
このレッスンでは、forcatsパッケージの関数fct ineq()とfct reorder()をggplot 2の棒グラフとボックス印刷のソートに適用します.
その前に、サンプルデータをロードし、この練習で使用したUG変数を「ファクタ型」に変換します.
drug <- read.csv("drug200.csv")

drug$Drug <- factor(drug$Drug)

str(drug)
'data.frame': 200 obs. of 6 variables:
$ Age : int 23 47 47 28 61 22 49 41 60 43 ...
$ Sex : chr "F""M""M""F"...
$ BP : chr "HIGH""LOW""LOW""NORMAL"...
$ Cholesterol: chr "HIGH""HIGH""HIGH""HIGH"...
$ Na_to_K : num 25.4 13.1 10.1 7.8 18 ...
$ Drug : Factor w/5 levels "drugA","drugB",..: 5 3 3 4 5 4 5 3 5 5 ...
1.fct ineq()関数を棒グラフに整列
ggplot 2に入るxパラメータの因子型変数にfct ineq()関数を適用すると、レベルの周波数降順に並べ替えられます.
サンプルデータのDrug変数は5つのレベルからなる因子型変数であるため、まずDrug変数をパラメータとする周波数バーパターンを描きます.
drug %>% ggplot(aes(x=Drug, fill = Drug)) + geom_bar()

各薬物の頻度を棒グラフで示した.
この状態で、xパラメータのDrug変数をfct ineq()関数で囲むと、周波数に応じて降順ソートされます.
fct ineq()関数を適用して棒グラフを描きましょう.
drug %>% ggplot(aes(x=fct_infreq(Drug), fill = Drug)) + geom_bar()

fct ineq()関数を適用すると、周波数降順でソートされます.
では、昇順ソートをしたい場合は、どうすればいいのでしょうか.
この場合、fct rev()関数をfct ineq()関数に再カプセル化するだけでよい.fct rev()関数を適用すると、降順ソートから昇順ソートに変更されます.
次に、fct rev()関数を使用して棒グラフを描きます.
drug %>% ggplot(aes(x=fct_rev(fct_infreq(Drug)), fill = Drug)) + geom_bar()

fct rev()関数の結果は、周波数の昇順に並べられています.
2.fct reorder()関数を印刷ボックスに整列
ggplot 2のxパラメータにfct reorder()関数を適用しますが、fct reorder(因子型変数、依存変数)形式を使用する必要があります.
fct reorder()関数を使用する場合は、因子型変数のレベル依存変数の中値で昇順します.
まず,fct reorder()関数を用いずにUG変数とAge変数をパラメータに設定した箱型図を描く.
drug %>% ggplot(aes(x=Drug, y=Age, fill = Drug)) + geom_boxplot()

UGタイプ固有のAge変数に適したboxplotが印刷結果ボックスに描画されていることがわかります.
この状態でxパラメータでfct reorder(Drug,Age)形状を使用すると、各タイプのAge変数の中値に基づいて昇順されます.
fct reorder()関数を適用したダンボール図を描きましょう.
drug %>% ggplot(aes(x=fct_reorder(Drug, Age), y=Age, fill = Drug)) + geom_boxplot()

段ボール印刷結果を表示すると、各タイプのUG変数の中値に基づいた昇順が表示されます.
降順でソートする場合は、fct reorder()関数にあります.desc=Tに設定すればいいです.
歯desc=Tの役割はfct ineq()関数にfct rev()関数を適用するのと同じです.
drug %>% ggplot(aes(x=fct_reorder(Drug, Age, .desc = T), y=Age, fill = Drug)) + geom_boxplot()

.desc=Tが適用されているため、各UGタイプのAgent変数の中央値に基づいて降順を決定できます.
また、fct reorder()関数にあります.funパラメータは、条件値を非中値に設定することもできます.
さらに,forcatsパッケージの関数を用いてggplot 2の棒グラフとカセット印刷をソートする方法も理解した.ありがとうございます.