このページでは、データを整理の仕方を説明します。
データ整理は入力したデータを作図や統計解析用の関数に使うための準備として行われます。
データ解析において最も時間を割く作業は、作図や統計解析ではなく、このデータの整理だとよく耳にします。
前のページで、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" |
データフレームから列を抽出する際には、「$」の記号を使用します。
データフレームのオブジェクト名$抽出したい列名 |
と入力すれば、抽出したい列名の値が、ベクトルとして取り出されます。
例えば、先に紹介したバッタのデータに関するオブジェクト 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 |
という結果(ベクトル)が返ってきます。
ちなみに、この抜き出した結果をオブジェクトに格納することも可能です。
例えば、
taicho <- mydata$bodylength |
と打ち込めば、次から taicho と入力することで、
mydataから抽出した体長のデータを利用することができます。
特定の条件を満たす行を抽出する場合、関数 subset () を使用します。
この関数は
subset (オブジェクト名, 条件式) |
と入力することで、オブジェクトから条件を満たす行を抽出してくれます。
例えば、バッタのデータ(mydata)から体長(bodylength)が 30 mm 未満のデータを
取り出したい場合、
subset (mydata, bodylength < 30) |
と入力します。すると、以下のような結果が返ってきます。
id place sei leftleg rightleg bodylength
|
なお、文字のデータも条件として扱うことができます。
例えば、
subset (mydata, place == "ito") |
と入力した場合、伊都キャンパスで採集した個体のデータのみが抽出されます。
データフレームから特定の要素を抽出したい場合、
オブジェクト名[行番号, 列番号] |
と入力します。
例えば、
mydata [3,2] |
と入力すると、mydata の3行目(個体IDが3のもの)の、2列目(place)に
格納されているデータ、「ito」が返ってきます。
なお、行番号を書かない(例:mydata[,3])場合にはすべての行を、
列番号を書かない(例:mydata[2,])場合にはすべての列を抽出します。
一方で、一次元のベクトルから要素を抽出する場合には、
ベクトル名[抽出したい要素の番号] |
と入力します。
例えば
mydata$bodylength[3] |
と入力すると、mydata$bodylength(データフレーム mydata から列 bodylength を抽出した、
ベクトルのデータ)から、3番目の値(22.85)が抽出されます。
データ解析で行うことの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)
で割ることになるため、「場所・性ごとの体長の平均」が算出されます。
データの整理に利用できる関数は、上記で説明したもの以外にも様々なものがあります。
というのも、 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() |