2016-05-10 6 views
0

私は文字列のベクトルを持っています。それらはそれぞれ内部に番号があり、この番号に従ってこのベクトルを並べ替えるのが好きです。いくつかの文字に従った文字列を並べる

MWE:

num = sapply(strsplit(str, split = NULL), function(s) { 
    as.numeric(paste0(head(s, -15)[-1], collapse = "")) 
}) 
str = str[sort(num, index.return=TRUE)$ix] 

が、私はシンプルな何かがあるかもしれないと思う:

> str = paste0('N', sample(c(1,2,5,10,11,20), 6, replace = FALSE), 'someotherstring') 
> str 
[1] "N11someotherstring" "N5someotherstring" "N2someotherstring" "N20someotherstring" "N10someotherstring" "N1someotherstring" 
> sort(str) 
[1] "N10someotherstring" "N11someotherstring" "N1someotherstring" "N20someotherstring" "N2someotherstring" "N5someotherstring" 

私はのようなものを使用して考えてい

[1] "N1someotherstring" "N2someotherstring" "N5someotherstring" "N10someotherstring" "N11someotherstring" "N20someotherstring" 

を持っているしたいと思いながら、

答えて

3

gtoolsパッケージ

gtools::mixedsort(str) 
#[1] "N1someotherstring" "N2someotherstring" "N5someotherstring" "N10someotherstring" "N11someotherstring" "N20someotherstring" 
+1

さん、ありがとうございました!私はもっ​​と簡単なものがあると確信していました... – clemlaflemme

+0

他の文字列操作を探して、別のトリックを得ました: 'ind = sort(as.numeric(gsub( '[AZ、az]'、 'str))、index .return = TRUE) ' – clemlaflemme

+0

@clemlaflemmeはいこれを行うにはかなりの方法があります。 – Sotos

関連する問題