如何在R中按名称里的R值对含多数字字符串的向量排序?
按文件名中的R值升序排序(R语言)
问题场景
现有如下文件名向量:
files <- c( "W2345_S-001-R2-20D.datavalue.csv", "W2346_S-001-R4-20D.datavalue.csv", "W2347_S-001-R1-20D.datavalue.csv", "W2348_S-001-R3-20D.datavalue.csv", "W2349_S-001-R5-20D.datavalue.csv" )
使用mixedsort()会优先按文件名中W后的数字排序,无法满足按R1→R2→R3→R4→R5升序排列的需求。
解决方案
通过正则表达式提取每个文件名中R后的数字,以此为排序依据对原向量排序:
# 提取每个文件名中R后面的数字并转为整数 r_nums <- as.integer(sub(".*R(\\d+)-.*", "\\1", files)) # 按R值升序排序文件名 sorted_files <- files[order(r_nums)]
结果验证
执行上述代码后,输出结果如下:
[1] "W2347_S-001-R1-20D.datavalue.csv" "W2345_S-001-R2-20D.datavalue.csv" [3] "W2348_S-001-R3-20D.datavalue.csv" "W2346_S-001-R4-20D.datavalue.csv" [5] "W2349_S-001-R5-20D.datavalue.csv"
正则说明
.*R(\\d+)-.* 的作用:
.*匹配任意长度的任意字符(直到遇到R)R(\\d+)匹配R并捕获其后的连续数字(\\d+表示1个或多个数字)-.*匹配R后数字后面的-及后续所有字符sub()函数将整个文件名替换为捕获到的数字部分,最终得到每个文件对应的R数值
内容的提问来源于stack exchange,提问作者Loki123
相关产品推荐
相关产品推荐

