web-dev-qa-db-ja.com

カスタムオーダーを使用して行を並べ替える

与えられたデータ:

_library(data.table)
DT = data.table(category=LETTERS[1:3], b=1:3)
DT
#    category b
# 1:        A 1
# 2:        B 2
# 3:        C 3
_

dplyrを使用して、特定の順序を取得するために行を再配置する方法categoryc("C", "A", "B")

_#    category b
# 1:        C 3
# 2:        A 1
# 3:        B 2
_
39
Daniel Krizian

まず、希望する順序で文字を含むベクトルを作成します。次に、match *ソートする変数を含むベクトル。 matchは、(最初​​の)一致のインデックスを返し、sliceにプラグインできます。

library(dplyr)

# create a vector with letters in the desired order
x <- c("C", "A", "B")

DT %>%
  slice(match(x, category))
#   category b
# 1        C 3
# 2        A 1
# 3        B 2

別の方法は、「カテゴリ」をfactorに変換し、levelsを目的の順序に設定し、arrangeを使用することです。

DT %>%
  mutate(category =  factor(category, levels = x)) %>%
  arrange(category)    
#   category b
# 1        C 3
# 2        A 1
# 3        B 2

* matchメソッドは this answer に触発されています。

66
Henrik