データフレームとは
Rでよく使われるデータの形式にデータフレーム (data frame)があります。 データフレームは、行と列からなる表形式のデータ で、Excelのシートのようなものです。
Rにもともと備わっているdata.frame
の拡張版として、tidyverse
ではtibble
というデータフレームの拡張版が使われていますが、初心者のうちはほとんど違いを意識することがないと思うので、ここではdata.frame
を使います。
データフレームの作成
通常、外部のデータベースから取得したExcelデータやCSVデータをRで読み込むと、データフレームとして読み込まれます。 ここでは練習のために、data.frame()
を使ってデータフレームを作成します。 data.frame()
関数の引数は主に,
...
: 列に格納するデータ
row.names
: 行名
check.rows
: 行数をチェックするかどうか
check.names
: 列名をチェックするかどうか
stringsAsFactors
: 文字列を因子型に変換するかどうか
fix.empty.names
: 空の列名を修正するかどうか
以下では、3つの自動車メーカーの2022年と2023年の売上高をデータフレームdf_car
に代入します。
df_car <- data.frame ( # データフレームを作成
name = c ( rep ( "トヨタ" ,2 ) ,rep ( "日産" ,2 ) ,rep ( "ホンダ" ,2 ) ) , # 企業名
year = rep ( c ( "2022" , "2023" ) ,3 ) , # 年度
sale = c ( 31379507 ,37154298 ,8424585 ,10596695 ,14552696 ,16907725 ) # 売上高
)
df_car
name
year
sale
トヨタ |20
2 | 3
379507|
トヨタ |20
3 | 3
154298|
日産 |2
22 |
8424585|
日産 |2
23 |
0596695|
ホンダ |20
2 | 1
552696|
ホンダ |20
3 | 1
907725|
rep()
は、ベクトルの要素を繰り返す関数です。引数は、rep(繰り返すベクトル, 繰り返す回数)
です。
データフレームdf_car
には、3つの変数があります。
name : 自動車メーカー名
year : 決算年
sale : 売上高(百万円)
次に、このデータフレームの中の特定の変数や値にアクセスする方法を説明します。
変数へのアクセス
データフレームの中の特定の変数にアクセスするには、$
を使います。
たとえば、df_car
のname
変数を表示するには、次のようにします。
[1] "トヨタ" "トヨタ" "日産" "日産" "ホンダ" "ホンダ"
あるいは、データフレームの列数を指定することで、特定の変数にアクセスすることもできます。 Rのデータフレームは行と列に1から順に番号が振られています。
特定の行、列、値にアクセスするには、[行,列]
を指定します。
例えば、df_car
の1列目(つまりname
変数)を表示するには、次のようにします。
[1] "トヨタ" "トヨタ" "日産" "日産" "ホンダ" "ホンダ"
同様に、1行目(つまりトヨタ
の2022
年の行)を表示するには、次のようにします。
name
year
sale
トヨタ |20
2 | 3
379507|
さらに、df_car
の特定の値にアクセスするには、次のようにします。
条件を指定して、特定の行を抽出することもできます。
たとえば、name
変数がトヨタ
の行を抽出するには、次のようにします。
df_car [ df_car $ name == "トヨタ" ,]
name
year
sale
トヨタ |20
2 | 3
379507|
トヨタ |20
3 | 3
154298|
条件式の書き方には、主に以下のようなものがあります。
==
: 等しい
!=
: 等しくない
<
: より小さい
<=
: 以下
>
: より大きい
>=
: 以上
%in%
: ベクトルの中に含まれる
たとえば、name
変数がトヨタ
または日産
の行を抽出するには、次のようにします。
df_car [ df_car $ name %in% c ( "トヨタ" , "日産" ) ,]
name
year
sale
トヨタ |20
2 | 3
379507|
トヨタ |20
3 | 3
154298|
日産 |2
22 |
8424585|
日産 |2
23 |
0596695|