データフレームは、Rユーザーなら避けられない重要なデータ形式の一つです。
しかし、ベクトル、マトリックス(行列)、リストなどは名前からどういったものか想像しやすいのに対して、データフレームという用語の意味はわかりにくいですよね。
- データフレームがなんだかよくわからずに使っている
- データフレームを使うことのメリットがわからない
- データフレーム独自のデータ操作方法を使いこなせていない
という方も多いのではないでしょうか。
この記事では、
- データフレームが何なのか知りたい
- データフレームを自由自在に扱えるようになりたい
という方向けに解説します。
具体的なコマンドも記載しているので、実際に手を動かしながらデータフレームの操作に慣れてくださいね。
Rstudioのデータフレームとは何なのか?
まずは、データフレームの定義と特徴について詳しく説明します。
データフレームの定義と特徴
データフレームは、Excel形式のように、行(横の並び)と列(縦の並び)でデータセットを扱うためのもので、各列は異なるデータ型を持つことができます。
Rでは、ExcelファイルやCSVファイルから読み込んだデータ、データベースから取得したデータなどをデータフレームに変換して扱うことが一般的です。
データフレームには簡単にデータ操作可能なコマンドが用意されているので、データを簡単に操作・分析することが可能となります。例えば、
- データのフィルタリング
- 並び替え
- 列の追加・削除
といった基本的な操作が直感的に行えます。このため、データ分析を行う際には欠かせないデータ形式となっています。
データフレームと他のデータ構造の比較
Rには、データフレーム以外にもベクトル、マトリックス、リストなどのさまざまなデータ構造があります。
データフレームの強みは、ベクトルやマトリックスより柔軟性が高く、リストよりデータ操作を単純化できるという点です。
ベクトルとの違い
まず、ベクトルとデータフレームとの違いについて考えてみましょう。
ベクトルは高校数学で習うベクトルと同じイメージで、いわば1次元の構造をもつデータ形式となります。
ベクトルの場合には、「同じデータ型(数値、文字列など)」からなるデータでなければいけません。
数値や文字列を混ぜて扱うことが可能なデータフレームと比べると、非常にシンプルな形式であることがわかります。
マトリックスとの違い
次に、マトリックス(行列)との違いです。
マトリックスはデータフレームと同じ二次元データ構造ですが、数値なら数値、文字列なら文字列と、同じ型のデータしか含めることはできません。
これに対してデータフレームは異なるデータ型を持つ列を含むことができるため、より柔軟なデータ操作が可能です。
このため、異なる種類のデータを同時に扱う必要がある場合にはデータフレームが適しています。
リストとの違い
最後に、リストとの比較です。
リストは異なるデータ型やデータ構造を含むことができる柔軟なデータ構造ですが、その柔軟性ゆえデータの操作を構造に合わせて考えなければいけません。
例えば、リストの中に小さいリストをいれたり、リストの1番目にはベクトルを、2番目には行列を、3番目にはまた違うベクトルを格納したりすることができます。
このように様々なデータをひとまとめにするために便利なリストですが、リストの場合には要素ごとに可能なデータ処理を考えて操作する必要があります。
これに対してデータフレームは人間が見慣れている2次元の形式と決まっていますから、決まったデータ操作の方法を覚えていればあまり考えることはありません。
Rstudioでのデータフレームの作成方法
以下では、データフレームの作成方法について解説します。
データを直接入力してデータフレームを作る方法
データを手入力してデータフレームを作成する場合には、列ごとにベクトルを指定してデータフレームを作成します。
###データを直接入力してデータフレームを作る###
> df <- data.frame(
名前 = c("太郎", "花子", "次郎"),
年齢 = c(25, 30, 35),
性別 = c("男性", "女性", "男性")
)
データの読み込み関数を使う場合
実際のデータを扱う際には、外部ファイルからデータを読み込むことが多いですよね。
特に、CSVファイルは広く使われているデータ形式の一つです。
read.csv() 関数を使うことで、CSVファイルを簡単にデータフレームとして読み込むことができます。
###デスクトップに保存されているcsvファイルからデータフレームを作る###
> df <- read.csv("C://Users/Desktop/data.csv")
あるいは、
###デスクトップに保存されているcsvファイルからデータフレームを作る###
> setwd("C://Users/Desktop")
> df <- read.csv("data.csv")
のような形で、作業場所を移動してからデータファイル名だけを使って読み込むことも可能です。
データフレームを作成した後に列名や行名を変更したい場合には、
###データフレームの列名や行名を指定・上書き###
# 列名
> colnames(df) <- c("Name", "Age", "Score")
# 行名
> rownames(df) <- c("1", "2", "3")
のような形で設定できます。
ラベル名を指定しておけば、df$Name などのようにして、データフレームを操作する際により直感的にデータを扱うことができます。
Rstudioでのデータフレームの基本操作
次に、データフレームの基本操作について以下の順番で詳しく説明します。
- データの抽出方法
- データの追加・削除
- データの並び替え
データの抽出方法
Rのデータフレームの操作において、特定のデータだけを取り出す(抽出する)方法は非常に重要です。インデックス([1,2]などの数値)や条件(等号 “=” や不等号 “>” など)を使ってデータを簡単に抽出することができます。
まず、行と列を指定してデータを抽出する基本的な方法を見てみましょう。以下のコードは、1行目(太郎)の2列目(年齢)のデータを抽出する例です。
> df <- data.frame(
名前 = c("太郎", "花子", "次郎"),
年齢 = c(25, 30, 35),
性別 = c("男性", "女性", "男性")
)
> df[1,2]
[1] 25
このように、行番号と列番号を指定することで、特定のデータを取り出すことができます。
また、複数の行や列を同時に抽出することも可能です。例えば、以下のコードは1行目から3行目までのすべての列のデータを抽出する例です。
> df[1:3,]
名前 年齢 性別
1 太郎 25 男性
2 花子 30 女性
3 次郎 35 男性
次に、列名を使ってデータを抽出する方法を見てみましょう。列名を指定することで、より直感的にデータを操作することができます。
以下の例は、”名前” 列のデータを抽出する方法です。
> df$名前
[1] "太郎" "花子" "次郎"
このように、列名を使ってデータを取り出すことで、コードが書きやすく&読みやすくなります。
最後に、条件を使ったデータの抽出方法について説明します。
例えば、年齢が26歳以上のデータを抽出する場合、subset関数を使うと便利です。
> subset(df, 年齢>=26)
名前 年齢 性別
2 花子 30 女性
3 次郎 35 男性
このように、条件を指定してデータをフィルタリングすることで、必要なデータだけを簡単に取り出すことができます。
データの追加・削除
Rのデータフレームでは、簡単にデータを追加したり削除したりすることができます。
まず、新しい列を追加する方法について見てみましょう。以下のコードは、新しい列 “住所” を追加する例です。
> df
名前 年齢 性別
1 太郎 25 男性
2 花子 30 女性
3 次郎 35 男性
> df$住所 <- c("東京", "大阪", "名古屋")
> df
名前 年齢 性別 住所
1 太郎 25 男性 東京
2 花子 30 女性 大阪
3 次郎 35 男性 名古屋
このように、新しいデータを簡単に追加することができます。
次に、行の追加方法について説明します。rbind() 関数を使うことで、既存のデータフレームに新しい行を追加することができます。以下のコードは、新しい行を追加する例です。
> df <- rbind(df, data.frame(名前 = "三郎", 年齢 = 28, 性別 = "男性", 住所 = "福岡"))
> df
名前 年齢 性別 住所
1 太郎 25 男性 東京
2 花子 30 女性 大阪
3 次郎 35 男性 名古屋
4 三郎 28 男性 福岡
最後に、データの削除方法について見てみましょう。データフレームの特定の行や列を簡単に削除することが可能です。例えば、1行目を削除する場合、以下のようにします。
> df[-1,]
名前 年齢 性別 住所
2 花子 30 女性 大阪
3 次郎 35 男性 名古屋
4 三郎 28 男性 福岡
練習問題:
1行目ではなく1列目のデータを削除する場合にはどうすればいいでしょうか。考えて実行してみてください。
データの並び替え
データを分析する際には、特定の基準でデータを並び替えたい場合があります。データフレームでは、簡単にデータの並び替えを行うことができます。
まず、ひとつの列に基づいてデータを並び替える方法を見てみましょう。以下のコードは、”年齢” 列を基準にデータを昇順に並び替える例です。
> df[order(df$年齢), ]
名前 年齢 性別 住所
1 太郎 25 男性 東京
4 三郎 28 男性 福岡
2 花子 30 女性 大阪
3 次郎 35 男性 名古屋
複数の列に基づいてデータを並び替えることも可能です。例えば、”性別” 列と “年齢” 列の両方を基準に並び替える場合、以下のようにします。
> df[order(df$性別, df$年齢), ]
名前 年齢 性別 住所
2 花子 30 女性 大阪
1 太郎 25 男性 東京
4 三郎 28 男性 福岡
3 次郎 35 男性 名古屋
Rstudioでのデータフレームの要約
データフレーム形式を使ったデータの要約や集計の方法について解説します。
summary関数による基本統計量の算出
データフレームでは、マトリックス型と同様にsummary() 関数を使って簡単に基本統計量を算出することができます。
まず、summary() 関数の基本的な使い方を見てみましょう。以下のコードは、データフレームの基本統計量を表示する方法です。
> summary(df)
summary() 関数を使うことで、データフレームの各列に対する基本統計量を一度に確認することができます。
さらに、summary() 関数を使って特定の列に対する統計量を算出することも可能です。例えば、”年齢” 列に対する基本統計量を算出する場合、以下のようにします。
> summary(df$年齢)
Min. 1st Qu. Median Mean 3rd Qu. Max.
25.00 27.25 29.00 29.50 31.25 35.00
aggregate関数による要約
データフレームを用いてグループごとの要約統計量を確認する際には、aggregate()関数が非常に便利です。この関数を使うことで、特定のグループごとに統計量を算出することができます。
以下のコードは、”性別” 列ごとに “年齢” 列の平均値を算出する方法です。
aggregate(年齢 ~ 性別, data = df, FUN = mean)
性別 年齢
1 女性 30.00000
2 男性 29.33333
さらに、複数の列に対して集計を行うことも可能です。例えば、”性別” 列ごとに “年齢” と “点数” 列の平均値や最大値を算出する場合、以下のようにします。
> df <- data.frame(
名前 = c("花子", "太郎", "次郎"),
年齢 = c(22, 23, 24),
点数 = c(90, 85, 88),
性別 = c("男性", "女性", "男性")
)
> aggregate(cbind(年齢, 点数) ~ 性別, data = df, FUN = mean)
性別 年齢 点数
1 女性 23 85
2 男性 23 89
> aggregate(cbind(年齢, 点数) ~ 性別, data = df, FUN = max)
性別 年齢 点数
1 女性 23 85
2 男性 24 90
まとめ
この記事では、データフレームについてその特徴や他のデータ形式との違いについて紹介し、基本的な操作方法について解説しました。
Rのパッケージによっては、入力データがデータフレーム形式であることを前提に作られている場合もあります。
ベクトルやマトリックスより柔軟なデータ形式に対応でき、リストより決まった形式でのデータ操作が可能なデータフレームを使いこなせれば、RやRstudioでのデータ分析が非常に効率的になります。
コメント