使用自定义顺序对行重新排序

标签 r dplyr

给定数据:

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/

相关文章:

r - 在 R 数据框中标记第一个按组

r - R 中的遗传算法(或优化)

在 blogdown 中读取数据文件

r - R中基于多个范围的连接表

R 根据时间间隔按线性增加估算 NA

r - 计算 dplyr 中列子集中的行计数

r - 是否可以在 DT 数据表中添加复选框?

r - 仅选择包含 R 中两列表的列表的元素

r - 根据列的每个值所属列表的类别对它们进行分组

r - 使用 dplyr mutate 的唯一值的 cumsum