如何按字符类型排序数据行:先降序数字再指定顺序排<LCM/<LDM
实现data.table字符列的自定义排序
需求
对data.table中字符类型的Resultado列执行排序,规则如下:
- 数字值(格式为逗号分隔小数,如
"5,89")按降序排列,排在最前面 - 以
<开头的特殊标识排在数字之后,固定顺序为:先<LCM,再<LDM
测试数据
library(data.table) dt <- data.table(Resultado = c("1,39", "5,89", "3,12", "0,25", "<LCM", "<LDM", "<LDM", "<LCM"))
解决方法
通过生成一个辅助排序键,将不同类型的内容映射为可用于排序的数值,再按键值降序排列即可满足需求:
# 生成排序键:数字转数值,特殊标识分配优先级 dt[, sort_key := fcase( Resultado == "<LCM", -1, Resultado == "<LDM", -2, default = as.numeric(gsub(",", ".", Resultado)) )] # 按排序键降序排序 dt <- dt[order(-sort_key)] # 查看排序后的结果 print(dt$Resultado)
输出结果
执行代码后,Resultado列的顺序为:
[1] "5,89" "3,12" "1,39" "0,25" "<LCM" "<LCM" "<LDM" "<LDM"
内容的提问来源于stack exchange,提问作者Camilo Montes
相关产品推荐
相关产品推荐

