dplyr パッケージで自然順ソートをしたい。
set.seed(123L)
library(dplyr)
x <- data.frame(Chr=sprintf("chr%s", c(1, 2, 3, 10, 20, "X", "Y")))
x <- sample_frac(x)
x
Chr
3 chr3
5 chr20
7 chrY
4 chr10
6 chrX
1 chr1
2 chr2
x %>% arrange(Chr)
Chr
1 chr1
2 chr10
3 chr2
4 chr20
5 chr3
6 chrX
7 chrY
文字列順に並んでしまいます。そこで naturalsort パッケージの naturalorder 関数を利用しましょう。
library(naturalsort) x %>% arrange(naturalorder(Chr))
Chr
1 chr1
2 chr2
3 chr3
4 chr10
5 chr20
6 chrX
7 chrY
解説
naturalorder 関数に文字列ベクトルを与えると自然順のインデックスが返ります。したがって arrange 関数は自然順にソートされた結果を返します。