4.5 データフレーム

行列とよく似ているが,Rにはデータフレーム(data.frame)という型のオブジェクトが用意されている. データフレームは行列とは違い,全ての要素のデータ型が同じである必要はないが,列に対しては同じ型である必要がある.

データフレームは以下のようにして生成することができる.

  1. matrix型のオブジェクトを変換する
  2. 列をそれぞれベクトルで指定する
  3. 基本的にはCSVやエクセルファイルを読み込む

サイズの大きなデータを手入力するわけにはいかないので,実務においては基本的に外部ファイルを読み込むことがほとんどである.

4.5.1 データフレームの生成:matrixを変換する

data.frame()という関数にmatrix型のオブジェクトを渡すことでデータフレームに変換することができる. 例を示す.

A <- matrix(seq(1,12), nrow=3, ncol=3)
## Warning in matrix(seq(1, 12), nrow = 3, ncol = 3): data length differs from size of
## matrix: [12 != 3 x 3]
df <- data.frame(A) # matrix型のオブジェクトAからdata.frame型のオブジェクトdfを生成
print(df)
##   X1 X2 X3
## 1  1  4  7
## 2  2  5  8
## 3  3  6  9

4.5.2 データフレームの生成:列をベクトルで指定する

先ほどと同様にdata.frame()という関数を利用する.各列に対応するベクトルをそれぞれ指定する方法でもデータフレームを生成できる. 例を示す.

v1 <- c(1,2,3,4,5) # 要素が 1,2,3,4,5 のベクトル
v2 <- letters[seq(1,5)] # 要素が a,b,c,d,e,f のベクトル
df <- data.frame(colname_1 = v1, colname_2 = v2)
print(df)
##   colname_1 colname_2
## 1         1         a
## 2         2         b
## 3         3         c
## 4         4         d
## 5         5         e

この例のように,列名=ベクトルという形で複数指定することができる.

4.5.3 外部ファイルを取り込む

外部ファイルを取り込む,R内でデータフレームオブジェクトとして操作することができる. ここでは

  1. csvファイル
  2. Excelファイル
  3. Google Spreadsheet

それぞれ例を示す.

4.5.4 csvファイル

csvファイルをRに読み込む方法はいくつかある.デフォルトで用意されているread.csv()関数を利用するか, readrというパッケージで提供されるread_csv()という関数を利用するという2つの方法が一般的である.

外部ファイルを取り込む際には,ファイルがどこにあるのかを明示的に記述する必要がある. ここではオープンデータをダウンロードして外部ファイルを取り込むまでの一連の流れを追ってみよう.

4.5.5 オープンデータのダウンロード

まず https://www.city.toshima.lg.jp/020/kuse/electronic/open-data/1511041608.html へアクセスしよう. このサイトの下部にある地域・年齢別人口のデータをダウンロードする.

豊島区オープンデータ
豊島区オープンデータ

ダウンロードが完了したら,ワーキングディレクトリにこのcsvファイルを移動し,ファイル名をtoshima-city-population.csvと変更しておく.

4.5.6 csvファイルの読み込み  

最後に,csvファイルを読み込もう.既にワーキングディレクトリにファイルを移動しているので,以下のプログラムを実行すると,dfという変数名でcsvの内容をデータフレーム形式で読み込むことができる.

df <- read.csv("toshima-city-population.csv", fileEncoding="SJIS")

WindowsやMacOSではOSの差によって特定の文字が上手く読み込めずエラーになる場合がある.文字コードを明示するために,上記のコードでは fileEncoding="SJIS"という引数を利用している.

読み込みが完了したらデータのサイズや先頭5行・先頭10列を表示してみる.

head(df[,1:10])
##   都道府県コード又は市町村コード 地域コード 都道府県名 市区町村名 調査年月日 地域名
## 1                         131164          0     東京都     豊島区   2022/4/1 豊島区
## 2                         131164          1     東京都     豊島区   2022/4/1   駒込
## 3                         131164          2     東京都     豊島区   2022/4/1   巣鴨
## 4                         131164          3     東京都     豊島区   2022/4/1 西巣鴨
## 5                         131164          4     東京都     豊島区   2022/4/1 北大塚
## 6                         131164          5     東京都     豊島区   2022/4/1 南大塚
##    総人口    男性    女性 X0.4歳の男性
## 1 283,595 142,042 141,553        4,653
## 2  17,428   8,393   9,035          350
## 3  18,915   9,272   9,643          309
## 4  12,502   6,103   6,399          163
## 5  12,484   6,225   6,259          208
## 6  16,231   8,034   8,197          228
dim(df)
## [1] 21 47

以上のように,分析したいデータをcsv形式のファイルで入手できれば,R上に簡単に読み込むことができる.