R言語のforcatsパッケージに含まれているfct_reorder()関数について解説します。この関数は、「別の数値ベクトルの値(平均値や中央値など)に基づいて、因子型(factor)の因子水準(レベル)の『並び順』を自動で変更したい」ときに使える関数です。「データの値が大きい順(または小さい順)に並べ替える」という処理を自動で行ってくれるため、グラフを描く前の前処理として最も頻繁に使われる超重要関数です。
forcatsパッケージは、因子型(factor型)データを操作するための強力で便利な関数を多く取り扱っています。また、Rのデータサイエンス向け主要パッケージ群であるtidyverseパッケージにも含まれています。
概要
fct_reorder()は、 別の変数を利用して因子水準を並び替えるための関数です。fct_reorder()は、因子が位置にマッピングされている1次元表示に便利です。fct_reorder2()は、因子が位置に依存しない外観にマッピングされている2次元表示に便利です。last2()とfirst2()は、fct_reorder2()のヘルパーです。last2()はxでソートされたyの最後の値を検索し、first2()は最初の値を検索します。
使い方
fct_reorder(
.f,
.x,
.fun = median,
...,
.na_rm = NULL,
.default = Inf,
.desc = FALSE
)
fct_reorder2(
.f,
.x,
.y,
.fun = last2,
...,
.na_rm = NULL,
.default = -Inf,
.desc = TRUE
)
last2(.x, .y)
first2(.x, .y)
引数
因子(または文字ベクトル)を指定します。
fの因子は、fct_reorder()の場合は.fun(.x)、とfct_reorder2()の場合はfun(.x, .y)の値が昇順になるように並べ替えられます。
fの因子は、fct_reorder()の場合は.fun(.x)、とfct_reorder2()の場合はfun(.x, .y)の値が昇順になるように並べ替えられます。
nサマリー関数を指定します。
fct_reorderの場合は1つのベクトル、fct_reorder2の場合は2つのベクトルを受け取り、1つの値を返します。
.funに渡す引数を指定します。
欠損値を削除するかどうかを指定します。
NULL(デフォルト)の場合、欠損値は警告とともに削除されます。NAを保持するにはFALSEに設定し(.fun が既に NA を処理している場合)、警告なしで削除するにはTRUEに設定します。
空のレベルの.funにはどのようなデフォルト値を使用するかを指定します。
これを使用して、出力内で空のレベルが表示される場所を制御します。
降順で並び替えるかを指定します。
凡例の要素のデフォルトの順序と一致させるために、fct_reorderとfct_reorder2のデフォルトは異なることに注意してください。
使用例
準備
あらかじめ、tidyverseパッケージまたはforcatsパッケージを読み込んでおきます。
# library(tidyverse)でもよい
library(forcats)
解説のために、次の因子を使用します。
df <- data.frame(x = runif(20, min = 1, max = 5),
f = fct(letters[floor(runif(20, min = 1, max = 5))]))
df
x f
1 3.618896 d
2 2.412789 b
3 2.081041 b
4 4.970736 a
5 3.533973 d
6 1.852833 b
7 1.517489 c
8 2.912472 a
9 4.696298 a
10 3.395044 c
11 4.904683 c
12 3.927170 a
13 2.426908 a
14 2.725895 c
15 1.592846 d
16 1.052310 c
17 3.862264 c
18 1.412737 c
19 2.785137 d
20 3.560404 c
df$f
[1] d b b a d b c a a c c a a c d c c c d c
Levels: d b a c
例1
データフレームdfについて、f列の因子水準ごとにx列の平均値を算出し、その平均値の並び順をf列の因子水準に適用するには次のようにします。
fct_reorder(df$f, df$x, .fun = mean)
[1] d b b a d b c a a c c a a c d c c c d c
Levels: b c d a