データフレームとは
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|