行列と同じく 2 次元配置のデータ構造を持つ

データフレーム

データフレームは、行列と同じく2次元配置のデータである。しかし、行列とは異なり、データフレームは列ごとに要素の単位が異なることもある。例えば、各年・各県のお米の収量を行列として保存すると下図の左のような形で保存され、行列中の各数値の単位はすべて同じ(例えば:トン)である。これに対して、データフレームの場合は、下図の右のように、県名、年、穀物種類、収量と列ごとに並べた形でデータを保存している。

Rの行列とデータフレームの違い

データフレームは、上図のように列ごとに単位が異なっている。それぞれの列はことなる属性のデータを表しているので、データフレームを使用するとき、とくに列を意識するとわかりやすい。また、データフレームは、基本的に列の名前がつけられる。データを操作するとき、この列の名前を使用して操作することが一般的である。

データフレームの作成

データフレームの作成は data.frame 関数を使う。

df <- data.frame(
  A = c(1, 2, 3, 4),
  B = c(T, T, F, T)
)

df
##      A     B
## 1    1  TRUE
## 2    2  TRUE
## 3    3 FALSE
## 4    4  TRUE


df[, 1]
## [1] 1 2 3 4


df$A
## [1] 1 2 3 4

subsetna.omit などを利用することで、条件を指定して、データフレームの一部だけを取得するようなことができる。

df <- data.frame(
  A = c(1, 2, 3, 4),
  B = c(T, F, T, T),
  C = c(1, 2, NA, 4)
)


na.omit(df)
##      A     B    C
## 1    1  TRUE    1
## 2    2 FALSE    2
## 4    4  TRUE    4


subset(df, colB == T)
##      A    B    C
## 1    1 TRUE    1
## 3    3 TRUE   NA
## 4    4 TRUE    4

データフレームの並べ替え

データフレームを並べる場合は order を利用つかう。

df <- data.frame(
  A = c(11, 53, 13, 11, 24, 50),
  B = c(33, 22, 86, 34, 66, 34),
  C = c(50, 42, 42, 19, 43, 91)
)


df[order(df$A), ]
##    A  B  C
## 1 11 33 50
## 4 11 34 19
## 3 13 86 42
## 5 24 66 43
## 6 50 34 91
## 2 53 22 42


df[order(df$A, decreasing = TRUE), ]
##   A  B  C
## 2 53 22 42
## 6 50 34 91
## 5 24 66 43
## 3 13 86 42
## 1 11 33 50
## 4 11 34 19
 

df[order(df$A, df$B), ]
##    A  B  C
## 1 11 33 50
## 4 11 34 19
## 3 13 86 42
## 5 24 66 43
## 6 50 34 91
## 2 53 22 42