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
関数は自然順にソートされた結果を返します。