目次(まとめ)
- データの構造を理解するのが第一歩
- データの行番号や列番号を指定することでデータを取り出すことができる
- ヘッダー(列名)の情報を使って、列を取り出すことができる
- 文字列の一致を調べて、行を取り出すことができる
こんにちは、みっちゃんです。
今回の記事では「プログラミング初心者で、Rでデータを読み込むことはできるけれども、データから必要なデータを取り出す方法がわからない」という方向けに、必要なデータの取り出す方法を解説します。
データの構造を理解するのが第一歩
ここでは、説明のために、Rにあらかじめ準備されているアヤメのデータ(iris)を使用します。
したがって、手持ちのファイルから読み込みを行う必要がありません。
便宜上、以下のように実行して、"data" という変数に、"iris" のデータを読み込みます。
> data <- iris
まず、"data" のデータの構造を理解をすることが重要です。
以下のように実行することで、"data" の大きさ(行数、列数)を知ることができます。
> dim(data)
[1] 150 5
この結果は、この "data" という変数が、150行、5列のデータであることを示しています。
また、以下のように実行することで、"data" の一部を取り出して、データの外観を知ることができます。
> head(data)
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
6 5.4 3.9 1.7 0.4 setosa
この結果から、"data" という変数には、列名を示すヘッダー行が存在し、"Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width", "Species"という、5つの列名が存在することがわかります。
また、(初心者のうちはあまり理解する必要がないかもしれませんが)以下のように実行することで、"data" という変数の型(タイプ)について知ることができます。
> typeof(data)
[1] "list"
結果は、"list" となっているので、今この変数 "data" は、リスト型の変数になっています。
データの行番号や列番号を指定することでデータを取り出すことができる
基本的に、変数 "data" から、一部の情報を取り出す場合には、その行番号と列番号を指定します。
例えば、1行目1列目の情報を取り出す場合には、以下のように実行します。
> data[1,1]
[1] 5.1
"1" がコンマ区切りで2つ並んでいますが、左側の数字が行番号、右側の数字が列番号を示しています。
1~5行目、1列目の情報を取り出す場合には、以下のように実行できます。
> data[c(1,2,3,4,5),1]
[1] 5.1 4.9 4.7 4.6 5.0
ここで、"c(・)" は、複数の数値を取り扱う場合に使用する関数です。
同じ結果は、以下のように実行することでも得られます。
> data[1:5,1]
[1] 5.1 4.9 4.7 4.6 5.0
":" の記号(コロン)を、最初の列番号、最後の列番号で挟むようにして、列を指定しています。
指定する列番号が増えたときには、こちらの表現の方が簡単かもしれません。
これらのことは、行番号の指定に対しても同じように行うことができます。
ヘッダー(列名)の情報を使って、列を取り出すことができる
上で示したように、列番号を指定して、列を取り出すのが、一番シンプルな方法です。
しかしながら、データが大きくなるほど、列の番号を数えて指定するという作業が、難しくなっていきます。
そこで、ヘッダー(列名)の情報を使って、列を取り出すことができます。
上で示したように、"data" という変数には、列名を示す5つのヘッダー行が存在("Sepal.Length", "Sepal.Width", "Petal.Length", "Petal.Width", "Species")することを確認していたので、それらを利用します。
例えば、"Species" という名前のついた列を取り出す場合には、以下のように実行します。
> data$Species
[1] setosa setosa setosa setosa setosa setosa
[7] setosa setosa setosa setosa setosa setosa
:
[139] virginica virginica virginica virginica virginica virginica
[145] virginica virginica virginica virginica virginica virginica
Levels: setosa versicolor virginica
実行結果のうち、最後の行の "Levels:" には、"Species" の種類が示されています。
つまり、このデータには、"setosa", "versicolor", "virginica" という3つの種類のアヤメのデータが入っているということです。
文字列の一致を調べて、行を取り出すことができる
上で示したように、行番号を指定して、行を取り出すのが、一番シンプルな方法です。
しかしながら、このデータのように、"setosa", "versicolor", "virginica" という3つの種類のアヤメのデータがあったときに、例えば、"setosa" のデータだけ取り出したいような場合に、"setosa" のデータの行番号を数えるのは大変です。
そこで、"setosa" のデータを取り出すためには、以下のように実行します。
> data[data$Species == "setosa",]
Sepal.Length Sepal.Width Petal.Length Petal.Width Species
1 5.1 3.5 1.4 0.2 setosa
2 4.9 3.0 1.4 0.2 setosa
3 4.7 3.2 1.3 0.2 setosa
4 4.6 3.1 1.5 0.2 setosa
5 5.0 3.6 1.4 0.2 setosa
:
これまで説明してきたように、コンマ区切りで、左側に行番号、右側に列番号を指定することでデータを取得することができます。
ただし、番号を直接指定する必要はありません。
この場合のように、「"data$Species" という列の内容が "setosa" に一致している行」を取り出すこともできます。
これで、全体のデータから、必要なデータだけを取り出せるようになりました。