order()関数
以下のデータを準備する。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
name.data <- c("John", "Gene", "Jack", "Luice", "Elen") gender.data <- c("M", "F", "M", "M", "F") height.data <- c(165, 160, 170, 178, 157) weight.data <- c(62, 56, 75, 82, 58) qualified.data <- c(T, F, T, F, T) data <- data.frame( name=name.data, gender=gender.data, height=height.data, weight=weight.data, qualified=qualified.data ) |
このデータフレームをheightの項目の昇順のオーダーでソートしたいとする。
order()
関数というのがあって、引数の項目でソートしたときに元データの項目番号がどういう順番で並ぶかを返してくれる。
1 2 3 4 |
> data$height [1] 165 160 170 178 157 > order(data$height) [1] 5 2 1 3 4 |
たとえば1番目のデータは1番小さい157で、これは5番目のデータ。2番目のデータは2番目に小さい160で2番目のデータ・・・という風に、heightデータを昇順に並べた時の元データの項目番号の並びを教えてくれる。
rank()
関数がデータを昇順に並べた時の、そのデータのソート後の順番を返すのとは違う点に注意。
この結果を元のデータフレームの行部分に使うと、その順番で並べ替えられたデータを返してくれる。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
> data name gender height weight qualified 1 John M 165 62 TRUE 2 Gene F 160 56 FALSE 3 Jack M 170 75 TRUE 4 Luice M 178 82 FALSE 5 Elen F 157 58 TRUE > > data[order(data$height),] name gender height weight qualified 5 Elen F 157 58 TRUE 2 Gene F 160 56 FALSE 1 John M 165 62 TRUE 3 Jack M 170 75 TRUE 4 Luice M 178 82 FALSE |
降順ソート
データを降順にソートしたい時は、decreasing=T
で指示する。
1 2 3 4 5 6 7 |
> data[order(data$height, decreasing=T),] name gender height weight qualified 4 Luice M 178 82 FALSE 3 Jack M 170 75 TRUE 1 John M 165 62 TRUE 2 Gene F 160 56 FALSE 5 Elen F 157 58 TRUE |
複数列のソートなど
以下の例は、数値以外でもソートできることと、複数のオーダーを組み合わせたソートの例を示している。
1 2 3 4 5 6 7 |
> data[order(data$qualified, data$weight),] name gender height weight qualified 2 Gene F 160 56 FALSE 4 Luice M 178 82 FALSE 5 Elen F 157 58 TRUE 1 John M 165 62 TRUE 3 Jack M 170 75 TRUE |
行番号の変更
ソート後に行ラベルを振り直したい場合は、rownames()
の内容を変更する。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
> data <- data[order(data$height),] > data name gender height weight qualified 5 Elen F 157 58 TRUE 2 Gene F 160 56 FALSE 1 John M 165 62 TRUE 3 Jack M 170 75 TRUE 4 Luice M 178 82 FALSE > rownames(data) <- 1:nrow(data) > data name gender height weight qualified 1 Elen F 157 58 TRUE 2 Gene F 160 56 FALSE 3 John M 165 62 TRUE 4 Jack M 170 75 TRUE 5 Luice M 178 82 FALSE |
いつも勉強になっております。
> data[order(data$height, decreasing=T),]
の部分
T)の後の , の後何もないですが何を表しているのでしょうか?
レスポンスがずいぶん遅くなって申し訳ありません。
自分の覚書のようなものなので、人様に見ていただいていると思っていませんでした。
コメント頂きありがとうございました。
“,”の件ですが、data[m,n]とするとデータフレームのm行目のn列目のデータが取り出されますが、data[m,]とするとm行目の行データが取り出されるようです。
order(data$height, decreasing=T)はheightの降順となる行番号を順に返すので、その後を”,]”と省略することで、heightの降順に行データが返されるという風に。