我有一个叫做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发布于 2019-02-12 17:37:10
一种选择是获取带有parse_number、order的数字。
myvec[order(readr::parse_number(myvec))]
#[1] "1-1_16S_S197_R1_001.fastq" "1-2_16S_S207_R1_001.fastq"
#[3] "2-1_16S_S217_R1_001.fastq" "2-2_16S_S226_R1_001.fastq"
#[5] "3-1_16S_S234_R1_001.fastq" "3-2_16S_S242_R1_001.fastq"
#[7] "11-1_16S_S199_R1_001.fastq" "11-2_16S_S209_R1_001.fastq"或者我们希望在第一个-之前根据字母数字字符进行排序,然后提取带有str_extract的子字符串(来自stringr),使用mixedorder (从gtools)对向量进行排序。
library(gtools)
library(stringr)
myvec[mixedorder(str_extract(myvec, "^[^-]+"))]发布于 2019-02-12 17:38:50
我们也可以使用来自str_sort的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"发布于 2019-02-12 17:37:01
> myvec[order(as.numeric(sub("(^\\d+).*", "\\1", myvec)))]
[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"https://stackoverflow.com/questions/54655570
复制相似问题