使用gtools::mixedsort对数字字符串排序不符合预期的问题
解决方法
问题出在两个关键点:一是分割后的字符串元素带前后空格,干扰了排序逻辑;二是gtools::mixedsort按整个字符串的自然顺序排序,而你的预期是按每个元素中第一个数字的大小排序。
步骤1:清理分割后的元素
先去掉逗号分割后每个元素的前后空格,避免空格打乱排序判断:
str1 <- "T-759..780, -D-27..758_E, -D-781..1338_C" parts <- trimws(strsplit(str1, ",")[[1]])
此时parts的内容为:
[1] "T-759..780" "-D-27..758_E" "-D-781..1338_C"
步骤2:按第一个数字排序
提取每个元素里的第一个连续数字,以此为依据排序:
# 提取第一个数字序列作为排序键 sort_keys <- as.integer(gsub("^\\D+", "", parts)) # 按排序键对元素排序 sorted_parts <- parts[order(sort_keys)] # 拼接成目标字符串 result <- toString(sorted_parts)
运行后result的结果为:
"-D-27..758_E, T-759..780, -D-781..1338_C"
补充:关于mixedsort的说明
如果一定要用mixedsort,但需要匹配你的预期排序逻辑,得先统一元素前缀格式(比如给无-前缀的元素补前缀),但这种方式不如直接按数字键排序直观高效。
内容的提问来源于stack exchange,提问作者Ahk86
相关产品推荐
相关产品推荐

