dplyr + naturalsort


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