首页 > 解决方案 > 如何根据分隔符之前的值对R中的向量元素进行排序

问题描述

我有一个名为myvec. 我想根据之前的数字对值进行排序-。有什么建议吗?

myvec <- c("2-1_16S_S217_R1_001.fastq", "2-2_16S_S226_R1_001.fastq", "3-1_16S_S234_R1_001.fastq", 
"3-2_16S_S242_R1_001.fastq", "11-1_16S_S199_R1_001.fastq", "1-1_16S_S197_R1_001.fastq", 
"11-2_16S_S209_R1_001.fastq", "1-2_16S_S207_R1_001.fastq")

另外,当我这样做时sort (myvec),我得到:

[1] "1-1_16S_S197_R1_001.fastq"  "1-2_16S_S207_R1_001.fastq"  "11-1_16S_S199_R1_001.fastq" "11-2_16S_S209_R1_001.fastq"
[5] "2-1_16S_S217_R1_001.fastq"  "2-2_16S_S226_R1_001.fastq"  "3-1_16S_S234_R1_001.fastq"  "3-2_16S_S242_R1_001.fastq"

也试过

require('gtools')
mixedsort(myvec)

这使:

[1] "1-2_16S_S207_R1_001.fastq"  "1-1_16S_S197_R1_001.fastq"  "2-2_16S_S226_R1_001.fastq"  "2-1_16S_S217_R1_001.fastq" 
[5] "3-2_16S_S242_R1_001.fastq"  "3-1_16S_S234_R1_001.fastq"  "11-2_16S_S209_R1_001.fastq" "11-1_16S_S199_R1_001.fastq"

我想要的结果:

1-1_16S_S197_R1_001.fastq
1-2_16S_S207_R1_001.fastq
2-1_16S_S217_R1_001.fastq
2-2_16S_S226_R1_001.fastq
3-1_16S_S234_R1_001.fastq
3-2_16S_S242_R1_001.fastq
11-1_16S_S199_R1_001.fastq
11-1_16S_S199_R1_001.fastq

标签: rsorting

解决方案


我们也可以使用str_sortfrom stringr

stringr:::str_sort(myvec, numeric = TRUE)
# [1] "1-1_16S_S197_R1_001.fastq" 
# [2] "1-2_16S_S207_R1_001.fastq" 
# [3] "2-1_16S_S217_R1_001.fastq" 
# [4] "2-2_16S_S226_R1_001.fastq" 
# [5] "3-1_16S_S234_R1_001.fastq" 
# [6] "3-2_16S_S242_R1_001.fastq" 
# [7] "11-1_16S_S199_R1_001.fastq"
# [8] "11-2_16S_S209_R1_001.fastq"

推荐阅读