Rの基礎 5 データフレーム

Rの基礎5では、Rでのデータ取り扱いの重要要素の一つである、データフレームについて説明します。データフレームはExcelで扱う表のようなもので、行と列を持つデータのかたまりです。Rでデータを扱う場合には多用します。データフレームを作成する際には、data.frame(列名=データ, 列名=データ, ....)という形を持つ、data.frame関数を用います。データフレームは同じ行数を持つベクターのまとまり(正確には、各列をベクターとするリストに相当します、行は通常横方向、列は縦方向を指します)なので、すべてのデータの長さは同じである必要があります。要は、行列が完全に長方形でないと作成できないという特徴を持ちます。データフレームのデータはベクターと同様にインデックスで指定して取り出すことができます。取り出すときは、データフレーム名[行, 列]の形で書きます。行や列は省略する事もできて、例えばデータフレーム名[1, ]と書けばデータフレームの1行目が、データフレーム名[, 1]と書けばデータフレームの1列目が取り出されます。

データフレームも関数の引数として用いることができます。summary関数を使えばデータフレームの要約が、nrowやncol関数、dim関数を用いればデータフレームの行数、列数が、colnamesやrownames関数を用いれば行や列についている名前を取得することができます。データフレームが大きいため全体を把握することが難しいときにはhead関数やtail関数で、データフレームの最初の6行もしくは最後の6行を表示させることもできます。

データフレームは各列をベクターとするリストなので、データフレームから列を取り出した場合には自動的にベクターとして認識されます。データフレームから列を取り出す際には、インデックス指定だけでなく、$を用いて取り出す事もできます(データフレーム名$列名)。一方、行を取り出すとベクトルにはならず、データフレームのままの形となります。これは、データフレームが各列をベクターとするため、列ごとにデータ型が異なる場合があるためです。ベクターにしたいときには列を取り出したあとにunlist関数などでベクターにしてやる必要があります。

データフレームの計算では、各行に対してfor文を使ってアクセスし、計算する場合が多くなります。ただし、Rではデータフレームに対してfor文を使うのは計算がとても遅いため推奨されておらず、通常はapply関数の使用が推奨されます(applyは太古の昔から引き継がれてきた関数で、愛好者も多いと思いますが、現代的にはdplyrというパッケージを用いる方が良いかと思います)。apply関数(sapplyやlapplyなど、apply関数群と呼ばれるものもあります)は使用方法がやや複雑で、慣れるまでは何をやっているのかはっきりわからないことがありますが、慣れればデータフレームの要約を知りたいときなどに便利な関数となります。