データのソート (並べ替え)

  • ベクトルのソートには sort 関数。あと、現在の順序から逆にするrev関数もある
  • データフレームのソートには order 関数。
  • デフォルトは昇順 (小さい順)。マイナスをつけると降順

# データセットmtcarsを使う。
data(mtcars)
mpg <- mtcars$mpg


# ベクトルの並べ替え
# 元の順序
mpg

# 逆順
rev(mpg)

# 昇順で並べ替え
sort(mpg)

# 元の順序で小さい順の添え字を調べるのがorder。小さい順のランキング
order(mpg)
order(-mpg) # 降順
mpg[order(mpg)] # sortを使ったときと同じ


# データフレームの並べ替え
# データフレームmtcarsをmpgで並べ替え
head(mtcars)
newdata <- mtcars[order(mtcars$mpg),]
head(newdata)

# データフレームmtcarsを変数cylとmpgで並べ替え
newdata <- mtcars[order(mtcars$cyl,mtcars$mpg),]
  # 単にorder(cyl, mpg) だけだとダメ
head(newdata)

# mpgは昇順で、cylは降順で並べ替え
newdata <- mtcars[order(-mtcars$cyl,mtcars$mpg),]
head(newdata)

例2

## ベクトルの処理
x <- c(1,3,5,6,4,2)
rev(x) # 逆順に並べ替え
sort(x) # 小さい順に並べ替え
sort(x, decreasing=T) # 大きい順に並べ替え。sort(x, T) でも可
order(x) # 小さい順の添え字
x[order(x)] # sort(x) と同じ

## サンプルデータ
dat <- data.frame(v1=1:12, v2=rep(c(4,2,9), each=4), v3=rep((rep(c(2,1), each=2)), 3))
dat

# 変数v2で並べ替え
dat[order(dat$v2),]

# v2とv3で並べ替え
dat[order(dat$v2, dat$v3),]

# v2は降順、v3は昇順
dat[order(-dat$v2, dat$v3),]


## ソートの例2.1。データフレームの並べ替え処理
## サンプルデータ
a <- paste("a", sample(1:10,10), sep="")
b <- paste("b", sample(1:10,10), sep="")
dat <- data.frame(round(matrix(rnorm(100), nr=10),2))
colnames(dat) <- a
rownames(dat) <- b
dat

## 列名で並べ替える
dat[,order(colnames(dat))]

## 行名で並べ替える
dat[order(rownames(dat)),]

## 列1で並べ替える
dat[order(dat[,1]),] # カンマは後ろにつく。列の数値で行を並べ替えるので

## 行1で並べ替える
dat[,order(dat[1,])] # カンマは前につき、dat[1,]につく。行の数値で列を並べ替えるので


変数の中身をシャッフルする・ランダムに並べ替える

x <- gl(6, 5, labels=c("G", "T", "D", "C", "B", "S"))
x
x[order(rnorm(length(x)))]


UCLA's R FAQ on SortingR-tipsの記事も参照。