如何按指定规则对含数字字符串的vector进行升序排序?
文件名分组自然排序解决方案
针对需求——先按R1/R2分组排序,组内按文件名末尾数字自然升序(1、2、9、10)排列,这里用R语言给出实现方案:
核心思路
- 从文件名中提取分组标识(R1/R2)作为第一排序键;
- 提取文件名末尾的数字部分并转为数值类型(避免字典序排序导致10排在2前面的问题),作为第二排序键;
- 按两个排序键依次升序排序。
代码实现
# 原始文件名列表 files <- c( "W2345_S-001-R1_1.csv", "W2346_S-001-R1_10.csv", "W2347_S-001-R1_2.csv", "W2348_S-001-R1_9.csv", "W2345_S-001-R2_1.csv", "W2346_S-001-R2_10.csv", "W2347_S-001-R2_2.csv", "W2348_S-001-R2_9.csv" ) # 提取分组标识(R1/R2) group <- sub(".*(R\\d).*", "\\1", files) # 提取末尾数字并转为数值类型 end_num <- as.numeric(sub(".*_(\\d+)\\.csv", "\\1", files)) # 按分组、末尾数字升序排序 sorted_files <- files[order(group, end_num)] # 输出排序结果 sorted_files
运行结果
[1] "W2345_S-001-R1_1.csv" "W2347_S-001-R1_2.csv" "W2348_S-001-R1_9.csv" "W2346_S-001-R1_10.csv" [5] "W2345_S-001-R2_1.csv" "W2347_S-001-R2_2.csv" "W2348_S-001-R2_9.csv" "W2346_S-001-R2_10.csv"
内容的提问来源于stack exchange,提问作者Loki123
相关产品推荐
相关产品推荐

