2017-02-15 1 views
0

私は以下のようなティブルを持っています。「run_1」の後ろに「run_11」の代わりに「run_2」が続きます。

test <- tibble(run = c("run_1","run_2", "run_3", "run_11", "run_111", "run_4")) 

test %>% arrange(run) 

は私に

1 run_1 
2 run_11 
3 run_111 
4 run_2 
5 run_3 
6 run_4 

を与えるが、私は

1 run_1 
2 run_2 
3 run_3 
4 run_4 
5 run_11 
6 run_111 

それを解決する方法をしたいですか?

+0

は、あなたがそれらを再ラベルを付けることができ 'run_01'、' run02'をなど? – bernie

+0

おそらく文脈が欠落しています。しかし、なぜあなたは、整列後に 'test'で元の順序をしたいのですか? – thisisrg

+0

最初は悪い例です、残念です。 – wei

答えて

3

編集

によって並べ替え、その後、あなたはソートしたい文字列の一部を抽出します

mixedorderを使用する機能:

library(gtools) 
test <- tibble(run = c("run_1","run_2", "run_3", "run_11", "run_111", "run_4")) 
test[mixedorder(test$run),] 
# A tibble: 6 × 1 
     run 
    <chr> 
1 run_1 
2 run_2 
3 run_3 
4 run_4 
5 run_11 
6 run_111 

オリジナルの答え:

mixedsort機能を使用する:

library(gtools) 
test <- c("run_1","run_2", "run_11", "run_3") 
mixedsort(test) 
[1] "run_1" "run_2" "run_3" "run_11" 
+0

これはうまいですが、それはチブルではうまくいかないようです。 – wei

+0

右、 'mixedsort'はここで助けません。しかし、 'mixedorder'はそうです。私は私の答えを編集しました。ありがとう@ user28575 – user890739

2

あなたはgtoolsパッケージにmixedsortを使用することができます。

gtools::mixedsort 
0

はその

library(tibble) 
test <- tibble(run = c("run_1","run_2", "run_3", "run_11", "run_111", "run_4")) 

test %>% 
    mutate(num = as.integer(gsub("^[^0-9]*(\\d*)", "\\1", run))) %>% 
    arrange(num) 
#> # A tibble: 6 x 2 
#>  run num 
#>  <chr> <int> 
#> 1 run_1  1 
#> 2 run_2  2 
#> 3 run_3  3 
#> 4 run_4  4 
#> 5 run_11 11 
#> 6 run_111 111 
1

方法tidyr/dplyr使用について:

test %>% separate(run, into=c("prefix","suffix")) %>% arrange(as.numeric(suffix)) %>% mutate(new_test=apply(. , 1 , paste , collapse = "_")) 

A tibble: 6 × 3 
    prefix suffix new_test 
    <chr> <chr> <chr> 
1 run  1 run_1 
2 run  2 run_2 
3 run  3 run_3 
4 run  4 run_4 
5 run  11 run_11 
6 run 111 run_111 
関連する問題