目次(まとめ)
- データの構造を理解するのが第一歩
- データの行番号や列番号を指定することでデータを取り出すことができる
- ヘッダー(列名)の情報を使って、列を取り出すことができる
- 文字列の一致を調べて、行を取り出すことができる



こんにちは、みっちゃんです。

今回の記事では「プログラミング初心者で、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" に一致している行」を取り出すこともできます。


これで、全体のデータから、必要なデータだけを取り出せるようになりました。