Dplyr を使用して変数をグループ別に並べ替える方法
次の基本構文を使用して、dplyr で変数をグループ化できます。
df %>% arrange (group_var, numeric_var) %>% group_by (group_var) %>% mutate (rank = rank(numeric_var))
次の例は、次のデータ フレームでこの構文を実際に使用する方法を示しています。
#create data frame df <- data. frame (team = c('A', 'A', 'A', 'A', 'B', 'B', 'B', 'C', 'C', 'C'), points = c(12, 28, 19, 22, 32, 45, 22, 28, 13, 19), rebounds = c(5, 7, 7, 12, 11, 4, 10, 7, 8, 8)) #view data frame df team points rebounds 1 to 12 5 2 to 28 7 3 to 19 7 4 A 22 12 5 B 32 11 6 B 45 4 7 B 22 10 8 C 28 7 9 C 13 8 10 C 19 8
例 1: 昇順でのランキング
次のコードは、プレーヤーが獲得したポイントをチームごとにグループ化して昇順に並べ替える方法を示しています。
library (dplyr) #rank points scored, grouped by team df %>% arrange (team, points) %>% group_by (team) %>% mutate (rank = rank(points)) # A tibble: 10 x 4 # Groups: team [3] team points rebounds rank 1 A 12 5 1 2 A 19 7 2 3 A 22 12 3 4 A 28 7 4 5 B 22 10 1 6 B 32 11 2 7 B 45 4 3 8 C 13 8 1 9 C 19 8 2 10 C 28 7 3
例 2: 降順でのランキング
Rank()関数内で負の符号を使用して、スコアされたポイントをグループごとに降順に分類することもできます。
library (dplyr) #rank points scored in reverse, grouped by team df %>% arrange (team, points) %>% group_by (team) %>% mutate (rank = rank(-points)) # A tibble: 10 x 4 # Groups: team [3] team points rebounds rank 1 to 12 5 4 2 A 19 7 3 3 A 22 12 2 4 A 28 7 1 5 B 22 10 3 6 B 32 11 2 7 B 45 4 1 8 C 13 8 3 9 C 19 8 2 10 C 28 7 1
ランキングでの同点の扱い方
tie.method引数を使用して、数値を並べ替えるときにタイを処理する方法を指定できます。
rank(points, ties. method = ' average ')
次のオプションのいずれかを使用して、リンクの処理方法を指定できます。
- Average : (デフォルト) リンクされた各アイテムに平均ランクを与えます (3 位と 4 位にランクされたアイテムは両方とも 3.5 のランクを受け取ります)。
- first : 最初にリンクされた要素を最も低いランクに割り当てます (3 番目と 4 番目にランクされた要素にはそれぞれランク 3 と 4 が与えられます)
- min : リンクされた各項目を最も低いランクに割り当てます (3 番目と 4 番目にランクされた項目は両方とも 3 のランクを受け取ります)。
- max : リンクされた各項目に最高のランクを割り当てます (3 番目と 4 番目にランクされた項目は両方とも 4 のランクを受け取ります)
- random : 同順位の各要素にランダムなランクを割り当てます (3 位と 4 位に同順位の要素のいずれかがいずれかのランクを受け取る可能性があります)
追加リソース
次のチュートリアルでは、dplyr で他の一般的な機能を実行する方法を説明します。
dplyrを使用してグループごとに最初の行を選択する方法
dplyr を使用して相対周波数を計算する方法
dplyrを使用して値を再コード化する方法
dplyr で NA をゼロに置き換える方法