-
目次(まとめ)
- ◾️ Rでデータフレームを作る方法
- ◾️ order関数を使って、指定した列の値で並び替える
Rで作ったデータフレームを並び替えたいです。どうやったらデータフレームの並び替えができますか?
並び替えは "order" 関数を使うことができます。
今回の記事では、データフレームの作り方から、指定した列で並び替えをする方法を紹介します。
Rでデータフレームを作る方法
例えば、以下のように、5人について、数学(Math)、英語(English)、科学(Science)のテストの点数をまとめた表があるとします。
Name | Math | English | Science |
Yamada | 46 | 75 | 80 |
Tanaka | 34 | 90 | 50 |
Kawashita | 90 | 54 | 43 |
Nakayama | 54 | 65 | 90 |
Abe | 35 | 40 | 30 |
このようなデータを、データフレームとして保存するためには、以下のように実行します。
> name <- c("Yamada", "Tanaka", "Kawashita", "Nakayama", "Abe")
> math <- c(46, 34, 90, 54, 35)
> english <- c(75, 90, 54, 65, 40)
> science <- c(80, 50, 43, 90, 30)
>
> data <- data.frame(name, math, english, science)
データフレームである "data" を表示すると、以下のように出力されます。
> data
name math english science
1 Yamada 46 75 80
2 Tanaka 34 90 50
3 Kawashita 90 54 43
4 Nakayama 54 65 90
5 Abe 35 40 30
また、列の名前を指定したい場合には、以下のように "names" 関数を使うことで指定することができます。
> names(data) <- c("Name", "Math", "English", "Science")
> data
Name Math English Science
1 Yamada 46 75 80
2 Tanaka 34 90 50
3 Kawashita 90 54 43
4 Nakayama 54 65 90
5 Abe 35 40 30
ここでは、ベクトル形式 "c(...)" でデータを与えましたが、ファイルを読み込んでデータを与えることもできます。詳しくは、こちらの記事をご参照ください。
order関数を使って、指定した列の値で並び替える
いま、5人のテストの点数の中で、数学(Math)の点数の順に並び替えることを考えます。
まず、データフレームの中で、数学の列を指定するためには "$" 記号を使用します。
> data$Math
[1] 46 34 90 54 35
実行結果をみると、データフレームの上から順番に、数学の点数が出力されていることがわかります。
このデータを、インデックスを使って詳しく見てみると、以下のような関係になっています。
> data$Math[1]
[1] 46
> data$Math[2]
[1] 34
> data$Math[3]
[1] 90
> data$Math[4]
[1] 54
> data$Math[5]
[1] 35
つまり、"data$Math" で列を指定して、"[..]" を使って行番号を指定することで、データフレームの対応するデータが取り出せるということになります。
"data$Math" を、値が小さいものから順に並び替えたときの、行番号を出力するためには、"order" 関数を使って以下のように実行します。
> order(data$Math)
[1] 2 5 1 4 3
出力されている数字は "行番号" で、値が小さい数学の点数に対応する行番号から順に並んでいます。
例えば、"data$Math" に対して、一番右端にある "3" を指定すれば、一番高い数学の点数が得られます。
> data$Math[3]
[1] 90
このような行番号の情報を使えば、データフレーム全体を、指定した列の値の順番で並び替えることができます。
> data[order(data$Math), ]
Name Math English Science
2 Tanaka 34 90 50
5 Abe 35 40 30
1 Yamada 46 75 80
4 Nakayama 54 65 90
3 Kawashita 90 54 43
"data" はデータフレームになっていて、"[行番号, 列番号]" を指定することができます(指定しなければ、全てのデータの指定になります)。
ここでは、"order" 関数を使って、数学の列で点数が小さいものから並び替えたときの行番号を取得して、"[行番号, 列番号]" に指定しています。
また、逆に、値が大きいものから順に並び替えて、行番号を取得する場合には、以下のように実行します。
> order(data$Math, decreasing = T)
[1] 3 4 1 5 2
今回の記事では、Rの中で定義したデータフレームで、指定した列の情報で並び替える方法を紹介しました。慣れるまで少しややこしいかもしれませんが、慣れると簡単です。