4  データフレーム

4.1 データフレームとは

Rでよく使われるデータの形式にデータフレーム(data frame)があります。 データフレームは、行と列からなる表形式のデータで、Excelのシートのようなものです。

Rにもともと備わっているdata.frameの拡張版として、tidyverseではtibbleというデータフレームの拡張版が使われていますが、初心者のうちはほとんど違いを意識することがないと思うので、ここではdata.frameを使います。

データフレームの例

4.2 データフレームの作成

通常、外部のデータベースから取得した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つの変数があります。

  1. name : 自動車メーカー名
  2. year : 決算年
  3. sale : 売上高(百万円)

次に、このデータフレームの中の特定の変数や値にアクセスする方法を説明します。

4.3 変数へのアクセス

データフレームの中の特定の変数にアクセスするには、$を使います。

データフレームの変数

たとえば、df_carname変数を表示するには、次のようにします。

df_car$name
[1] "トヨタ" "トヨタ" "日産"   "日産"   "ホンダ" "ホンダ"

あるいは、データフレームの列数を指定することで、特定の変数にアクセスすることもできます。 Rのデータフレームは行と列に1から順に番号が振られています。

データフレームの位置

特定の行、列、値にアクセスするには、[行,列]を指定します。

変数へのアクセス

例えば、df_carの1列目(つまりname変数)を表示するには、次のようにします。

df_car[,1] # 1列目の変数
[1] "トヨタ" "トヨタ" "日産"   "日産"   "ホンダ" "ホンダ"

列のアクセス

同様に、1行目(つまりトヨタ2022年の行)を表示するには、次のようにします。

df_car[1,] # 1列目の変数
name year sale
トヨタ |20 2 | 3 379507|

行のアクセス

さらに、df_carの特定の値にアクセスするには、次のようにします。

df_car[2,3] # 2行目の3列目の値
[1] 37154298

値のアクセス

条件を指定して、特定の行を抽出することもできます。

条件の指定

たとえば、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|