Skip to Main Content

R:ゼロから始める解析生活: データ整理

フリーソフトRを用いたデータ解析のはじめ方を紹介。

Rでデータ整理

このページでは、データを整理の仕方を説明します。
データ整理は入力したデータを作図や統計解析用の関数に使うための準備として行われます。

データ解析において最も時間を割く作業は、作図や統計解析ではなく、このデータの整理だとよく耳にします。

目次

はじめに
画面の見方
基礎知識
データ読み込み
データ整理

(1) 列の抽出
(2) 行の抽出
(3) 要素の抽出
(4) 表の作成
(5) tidyverse
作図
解析ノートづくり
おわりに

(1)データ型の確認と変換

前のページで、R で扱うデータには型(numeric, factor, character など)が
あることを紹介しました。

特に文字のデータは factor型か character型かで扱いが大きく変わります。
最近の R では読み込んだ文字データがデフォルトではcharacter型で認識されます。
カテゴリの文字データは、解析を始める前に factor型に変換しておく必要があります。


データの型を変換する場合、as.○○() という関数を使います。
○○ には変換先のデータの型の名前を入れておきます。
例えば、factor型に変換したい場合には as.factor()、
numeric型に変換したい場合には as.numeric() といった表記をします。

今回のデータでは place (
採集場所)、sei (性別) がカテゴリカルデータです。 
デフォルトでは character型 であるため、以下のコードを
コンソール画面にコピペして、factor型に変換しておきましょう。

 

<コピペ>

mydata$place <- as.factor(mydata$place)
mydata$sei <- as.factor(mydata$sei)

 

なお、今のデータの型は関数 class() を用いて確認できます。
()内にオブジェクト名を入力することで、そのオブジェクトの型が表示されます。

 

> class(mydata$bodylength)

[1] "numeric"

 

(2)データフレームから列の抽出

データフレームから列を抽出する際には、「$」の記号を使用します。

データフレームのオブジェクト名$抽出したい列名

と入力すれば、抽出したい列名の値が、ベクトルとして取り出されます。

例えば、先に紹介したバッタのデータに関するオブジェクト mydata から、
体長のデータ(bodylength)を抽出したいと仮定します。
その場合、コンソール画面に

<コピペ>
mydata$bodylength

と入力すれば、体長の数値を抜き出した

 [1] 23.81 24.65 22.85 23.47 25.15 25.36 24.90 29.14 26.55 32.16 28.78 28.29
[13] 30.92 30.34 31.02 30.80 27.77 34.15 35.65 34.48

という結果(ベクトル)が返ってきます。

 

ちなみに、この抜き出した結果をオブジェクトに格納することも可能です。
例えば、

<コピペ>
taicho <- mydata$bodylength

と打ち込めば、次から taicho と入力することで、
mydataから抽出した体長のデータを利用することができます。

(3)データフレームから行の抽出

特定の条件を満たす行を抽出する場合、関数 subset () を使用します。
この関数は

subset (オブジェクト名, 条件式)

と入力することで、オブジェクトから条件を満たす行を抽出してくれます。


例えば、バッタのデータ(mydata)から体長(bodylength)が 30 mm 未満のデータを
取り出したい場合、

<コピペ>
subset (mydata, bodylength < 30)

と入力します。すると、以下のような結果が返ってきます。

 

   id         place  sei  leftleg  rightleg  bodylength
1   1            ito    m   13.17    16.16           23.81
2   2            ito    m   15.01    16.88           24.65
3   3            ito    m   15.29    14.52           22.85
4   4            ito    m   14.05    14.39           23.47
5   5  hakozaki    m   15.77    16.44           25.15
6   6  hakozaki    m   16.17    15.06           25.36
7   7  hakozaki    m   15.03    14.19           24.90
8   8  maidashi    m   14.96    17.26           29.14
9   9  maidashi    m   15.99    16.98           26.55
11 11            ito    f    17.15    16.56           28.78
12 12           ito     f    16.39    16.49           28.29
17 17 hakozaki     f    16.91    17.76          27.77

 

なお、文字のデータも条件として扱うことができます。
例えば、

<コピペ>
subset (mydata, place == "ito")

と入力した場合、伊都キャンパスで採集した個体のデータのみが抽出されます。

(4)要素の抽出

データフレームから特定の要素を抽出したい場合、

オブジェクト名[行番号, 列番号]

と入力します。

 

例えば、

<コピペ>
mydata [3,2]

と入力すると、mydata の3行目(個体IDが3のもの)の、2列目(place)に
格納されているデータ、「ito」が返ってきます。

 

なお、行番号を書かない(例:mydata[,3])場合にはすべての行を、
列番号を書かない(例:mydata[2,])場合にはすべての列を抽出します。

 

 

一方で、一次元のベクトルから要素を抽出する場合には、

ベクトル名[抽出したい要素の番号]

と入力します。

 

例えば

mydata$bodylength[3]

と入力すると、mydata$bodylength(データフレーム mydata から列 bodylength を抽出した、
ベクトルのデータ)から、3番目の値(22.85)が抽出されます。

(5)表の作成

データ解析で行うことの1つに、得られたデータをまとめた表の作成が挙げられます。
R では 関数 xtabs () を使うことで、簡単に表を作成できます。

これは

xtabs (列名1 ~ 列名2 + 列名3, data = オブジェクト名)

と入力することで、

という表が生成されます(列の要素が2つ以上の場合)。

なお、列名1の名前を書かなかった場合、条件を満たす行の和が算出されます。

また、~ の後に2列より多くの名前を書くこともできます。

xtabs (列名1 ~ 列名2 + 列名3 + 列名4 + 列名5, data = オブジェクト名)

と入力すると、4次元の表を作成できます。
(とはいえ、このような表は直感的に理解しにくいので、大体2次元の表を使います。


例として、バッタのデータ(mydata)から、各場所(伊都・箱崎・馬出)で
採集したオスとメスの個体数の合計を求めたい場合を考えます。

この場合、

<コピペ>
xtabs (~ place + sei, data = mydata)

と書けば、

                  sei
place           f   m
  hakozaki   4   3
  ito              3   4
  maidashi   3   3

という集計結果(=表)が返されます。


ちなみに、xtabs() を使って平均値の表を計算することもできます。例えば、

<コピペ>
xtabs(bodylength ~ place + sei,data = mydata) / xtabs(~place + sei,data = mydata)

と入力すると、
「場所・性ごとの体長の合計」
xtabs(bodylength ~ place + sei,data = mydata)
「場所・性ごとのデータの数」xtabs(~place + sei,data = mydata)
で割ることになるため、「場所・性ごとの体長の平均」が算出されます。

(6)tidyverseを使ったデータ整理

データの整理に利用できる関数は、上記で説明したもの以外にも様々なものがあります。
というのも、
R はフリーソフトであるため、世界中の様々なユーザーが
より便利で使いやすい関数を日夜、探究しているためです。

他のユーザーが作成した関数は、
パッケージにまとめられて提供されています
数あるパッケージの中でも、tidyverse というパッケージ * はデータ整理に役立ちます。
このパッケージを読み込むことで、上述した列や行の抽出といったデータ整理を
より簡単に進めることができます。


* tidyverse はデータ整理に便利なパッケージをまとめたパッケージです。
  tidyverse に含まれる各パッケージや関数
には以下のものがあります。

パッケージ 用途 代表的な関数
dplyr

データの選択や追加

filter(), select(), mutate(), group_by(), summarise()
tidyr データの変形 pivot_wider(), pivot_longer()
stringr 文字列の処理 str_c(), str_detect()
readxl excelデータの読み込み read_excel()