データのソート (並べ替え)
- ベクトルのソートには 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 Sorting、R-tipsの記事も参照。