R语言如何使用dplyr包arrange函数按指定顺序对数据行排序
实现方案
需求完全可以实现,借助dplyr的arrange()结合match()函数就可以在不修改原数据结构的前提下完成自定义优先级排序,代码如下:
首先确认你已经加载dplyr包:
library(dplyr)
需求1实现
规则:row__type优先级为model > IV > DV,同类型下row__name正序排列
example_data__Product_1 <- example_data %>% arrange( match(row__type, c("model", "IV", "DV")), row__name ) # 验证输出 example_data__Product_1
输出结果和预期完全一致:
row__name row__type score 1 Intercept model 25 2 IV_1 IV 10 3 IV_2 IV 15 4 DV_4 DV 20
需求2实现
规则:row__type优先级为model > DV > IV,同类型下row__name倒序排列
example_data__Product_2 <- example_data %>% arrange( match(row__type, c("model", "DV", "IV")), desc(row__name) ) # 验证输出 example_data__Product_2
输出结果和预期完全一致:
row__name row__type score 1 Intercept model 25 2 DV_4 DV 20 3 IV_2 IV 15 4 IV_1 IV 10
补充说明
match(row__type, 自定义顺序向量)的逻辑是返回每个row__type值在自定义向量里的位置索引,arrange默认按索引从小到大排序,自然就会按照指定的优先级排列,适合临时自定义排序的场景。如果你需要长期固定该字段的排序逻辑,也可以将row__type转为指定水平的因子:
# 固定row__type的默认排序优先级为model > IV > DV example_data <- example_data %>% mutate(row__type = factor(row__type, levels = c("model", "IV", "DV")))
之后直接调用arrange(example_data, row__type, row__name)即可得到需求1的排序结果。
内容的提问来源于stack exchange,提问作者Mel
相关产品推荐
相关产品推荐

