与えられたデータ:
_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
を使用して、特定の順序を取得するために行を再配置する方法category
のc("C", "A", "B")
?
_# category b
# 1: C 3
# 2: A 1
# 3: B 2
_
まず、希望する順序で文字を含むベクトルを作成します。次に、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 に触発されています。