给定数据:
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
返回(第一个)匹配的索引,可以将其插入到 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
另一种方法是将“类别”转换为因素
,将级别
设置为所需的顺序,然后使用排列
:
DT %>%
mutate(category = factor(category, levels = x)) %>%
arrange(category)
# category b
# 1 C 3
# 2 A 1
# 3 B 2
*match
方法的灵感来自 this answer .
关于使用自定义顺序对行重新排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26548495/