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

データフレーム

データフレームは行列と同じく 2 次元配置である。行列型のデータはすべて同じ属性でなければならない。例えば、行列全体がすべて数値、あるいはすべて文字列などである必要がある。これに対して、データフレーム型のデータはそのような制限がない。1 列目が数値、2 列目が文字列、3 列目は複素数などのように複数の属性束ねることができる。

mt <- cbind(
  c("A", "B", "C", "D"),
  c(1, 2, 3, 4),
  c(T, T, F, T)
)
mt
##      [,1] [,2] [,3]   
## [1,] "A"  "1"  "TRUE" 
## [2,] "B"  "2"  "TRUE" 
## [3,] "C"  "3"  "FALSE"
## [4,] "D"  "4"  "TRUE"


df <- data.frame(
  Letter = c("A", "B", "C", "D"),
  Numeric = c(1, 2, 3, 4),
  Logic = c(T, T, F, T)
)
df
##   Letter Numeric Logic
## 1      A       1  TRUE
## 2      B       2  TRUE
## 3      C       3 FALSE
## 4      D       4  TRUE

データフレームの作成

データフレームの作成は 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