1.5 データ構造(4)データフレーム
データフレームは、同じ長さの複数のベクトルを要素とするリストで、表形式のデータを扱うためのデータ構造です。行列と違い、各列のデータ型は異なっても構いません。データフレームの各行を個体、各列を変数と呼びます。データフレームを作成するには、data.frame()
関数を用います。引数はlist()
関数と同様です。
<- data.frame(pacific = pacific,
pacific_seiseki win = c(82, 74, 74, 73, 66, 64),
lose = c(59, 66, 68, 69, 73, 78))
pacific_seiseki
## pacific win lose
## 1 楽天 82 59
## 2 西武 74 66
## 3 ロッテ 74 68
## 4 ソフトバンク 73 69
## 5 オリックス 66 73
## 6 日本ハム 64 78
リストと同様に、データフレームの列を参照することができます。$
で列名を指定すれば、その列のベクトルが返され、["列名"]
の形式で列名を指定すれば、1列のデータフレームとして結果が返されます。
$win pacific_seiseki
## [1] 82 74 74 73 66 64
"lose"] pacific_seiseki[
## lose
## 1 59
## 2 66
## 3 68
## 4 69
## 5 73
## 6 78
リストと異なる点は、行列の要素と同様の参照が利用できることです。
# 要素の参照
2, 3] pacific_seiseki[
## [1] 66
# 行の参照
4, ] pacific_seiseki[
## pacific win lose
## 4 ソフトバンク 73 69
# 列の参照
3] pacific_seiseki[,
## [1] 59 66 68 69 73 78
# 複数列の参照: 2列目から3列目
2:3] pacific_seiseki[,
## win lose
## 1 82 59
## 2 74 66
## 3 74 68
## 4 73 69
## 5 66 73
## 6 64 78
# 複数列の参照: 1列目と3列目
c(1, 3)] pacific_seiseki[,
## pacific lose
## 1 楽天 59
## 2 西武 66
## 3 ロッテ 68
## 4 ソフトバンク 69
## 5 オリックス 73
## 6 日本ハム 78
データフレームの行数と列数は以下のようにして確認することができます。
# 行数
nrow(pacific_seiseki)
## [1] 6
# 列数
ncol(pacific_seiseki)
## [1] 3
# 同時に
dim(pacific_seiseki)
## [1] 6 3
RStudioを利用している場合、Environment Paneにオブジェクトの一覧が表示されますが、その中でデータフレームのオブジェクトをクリックすると、スプレッドシートの形式で、データのプレビューが表示され、簡易的なデータの検索やソートができます。
1.5.1 外部データのデータフレームへのインポート
これまでは、Rの基本的な説明のために、ベクトルやデータフレームのオブジェクトをコマンドで作成する方法を示してきましたが、実際の分析では既存の外部データをRにインポートすることが多いです。ここでは、CSVファイルをインポートする方法を紹介します。
fukuoka2015.csv
は2015年の福岡県内市区町村の人口および世帯数のデータです。リンクをクリックするととブラウザでファイルの中身が表示されるので、作業ディレクトリ(プロジェクトフォルダの場所)に「data」というフォルダを作成して、その中に保存しておいてください(右クリック->「名前を付けて保存」)。CSVファイルをデータフレームとしてインポートするには、read.csv()
関数を用います。
<- read.csv("./data/fukuoka2015.csv", encoding = "UTF-8")
fukuoka2015 # データフレームの最初の6行を表示
head(fukuoka2015)
## area_code 地域 総面積 人口総数 昼間人口 世帯数
## 1 40101 門司区 7367 99637 97946 43082
## 2 40103 若松区 7131 82844 82591 33692
## 3 40105 戸畑区 1661 59116 70519 27797
## 4 40106 小倉北区 3923 181878 224589 91253
## 5 40107 小倉南区 17174 212850 190913 88497
## 6 40108 八幡東区 3626 68844 73391 31442
encoding
引数に、読み込むファイルの文字コード(このファイルの場合UTF-8
)を指定します。この引数を指定しない場合、システム標準の文字コード(Windowsの場合SHIFT-JIS
、Macの場合UTF-8
)で読み込まれます。ファイルの文字コードと読み込もうとする文字コードに相違がある場合、文字化けが発生します。UTF-8
のファイルを読み込む場合、Macの環境では、encoding
引数の指定は必要ありません。
特に引数を指定しない場合、csvファイルの中で、数値のみからなるの列は数値型、それ以外は文字型として読み込まれます。fukuoka2015
の場合、area_code
はコード番号を表すので名義尺度ですが、数値型として読み込まれるので、必要に応じて因子型に変換します。また、地域
は文字型として読み込まれるので、こちらも必要に応じて因子型に変換します(後述)。
str(fukuoka2015)
## 'data.frame': 68 obs. of 6 variables:
## $ area_code: int 40101 40103 40105 40106 40107 40108 40109 40131 40132 40133 ...
## $ 地域 : chr "門司区" "若松区" "戸畑区" "小倉北区" ...
## $ 総面積 : int 7367 7131 1661 3923 17174 3626 8313 6936 3163 1540 ...
## $ 人口総数 : int 99637 82844 59116 181878 212850 68844 256117 306015 228441 192688 ...
## $ 昼間人口 : int 97946 82591 70519 224589 190913 73391 243568 303352 381926 296992 ...
## $ 世帯数 : int 43082 33692 27797 91253 88497 31442 110562 141682 138832 116186 ...