39. データフレーム事始


データフレームとは

データフレームとは data.frame クラスを持つリストのことであり,数値ベクトルや文字ベクトル,因子ベクトル(文字型ベクトル)などの異なる型のデータをまとめて1 つの変数として持っている.外見は行列と同じ 2 次元配列であるが,データフレームの各行・列はラベルを必ず持ち,ラベルによる操作が可能である点が普通の行列と異なる.しかも各列の要素の型はバラバラでも構わないので,ベクトルやリストで持っているデータをデータフレームに変換することで統計解析がやりやすくなる.

数値ベクトルと因子はそのままの状態で含まれ,非数値ベクトルは因子に強制変換される.データフレームに変数として現れるベクトル構造は全て同じ「長さ」を,行列構造は同じ「行サイズ」を持たなければならない.

データフレームの作成例

データフレームを作成する方法は以下のような方法がある.

  1. ベクトル(や行列,リストなど)からデータフレームを作成する
  2. ファイルにあるデータを読み込んでデータフレームを作成する

まずは前者の方法を紹介する.「性別」「身長」「体重」データをベクトルで用意しておき,それらを関数 data.frame() で 1 つのデータフレームに変換する.

  
 data.frame(列名1 = ベクトル1, 列名2 = ベクトル2, ... )

実際に関数 data.frame() でデータフレームを作成してみる.

 
 sex    <- c("F","F","M","M","M")
 height <- c(158,162,177,173,166)
 weight <- c(51,55,72,57,64)
 ( x    <- data.frame(SEX=sex, HEIGHT=height, WEIGHT=weight) )

 データフレーム x

  SEX HEIGHT WEIGHT
1   F    158     51
2   F    162     55
3   M    177     72
4   M    173     57
5   M    166     64

行列や配列からデータフレームを作成することも出来る.例えば行列 x をデータフレームに変換する場合は data.frame(x) とすればよい.ラベル名を指定しない場合は自動でラベル名が振り分けられる.

データフレームの使用例

データフレーム x を生成すると,「データフレーム x の『性別』データ」や「データフレーム x の『体重』データ」としてデータを取り出すことが出来る.取り出す方法は「データフレーム名$列名」などとすればよい.

  
 x$HEIGHT                   # データフレーム x の『身長』データ

[1] 158 162 177 173 166

 mean( x$WEIGHT )           # データフレーム x の『体重』データの平均

[1] 59.8

 x[,2]                      # データフレーム x の 2 列目を表示する

[1] 158 162 177 173 166

データフレームという形にすることで,要素それぞれに『性別』や『身長』などの属性を付けることに成功した.その恩恵の一つとして,関数 summary() を使うことでデータフレームの列ごとの特徴を見ることが出来る.すると上から順に「最小値,第 1 四分位点,中央値,平均,第 3 四分位点,最大値」が表示される.

  
 summary(x)

 SEX       HEIGHT          WEIGHT    
 F:2   Min.   :158.0   Min.   :51.0  
 M:3   1st Qu.:162.0   1st Qu.:55.0  
       Median :166.0   Median :57.0  
       Mean   :167.2   Mean   :59.8  
       3rd Qu.:173.0   3rd Qu.:64.0  
       Max.   :177.0   Max.   :72.0  

関数 by(データフレーム,層別する変数,関数名) を使うことでデータフレームの層ごとに集計を行うことができる.以下では,データフレーム x について男女別に要約統計量を求めている.

  
 by(x, x$SEX, summary)

x$SEX: F
 SEX       HEIGHT        WEIGHT  
 F:2   Min.   :158   Min.   :51  
 M:0   1st Qu.:159   1st Qu.:52  
       Median :160   Median :53  
       Mean   :160   Mean   :53  
       3rd Qu.:161   3rd Qu.:54  
       Max.   :162   Max.   :55  
------------------------------------------------------------ 
x$SEX: M
 SEX       HEIGHT          WEIGHT     
 F:0   Min.   :166.0   Min.   :57.00  
 M:3   1st Qu.:169.5   1st Qu.:60.50  
       Median :173.0   Median :64.00  
       Mean   :172.0   Mean   :64.33  
       3rd Qu.:175.0   3rd Qu.:68.00  
       Max.   :177.0   Max.   :72.00