日々のつれづれ

不惑をむかえ戸惑いを隠せない男性の独り言

data.frameとmatrixの違い-2

久しぶりにR関連のメモ。
data.frameとmatrixの違いはdata.frameとmatrixの違い - 日々のつれづれ、良かった探しで書いた。今日はその続き。
data.frameには、便利なデータアクセス方法がある話。

> x <- data.frame(matrix(1:12,ncol=3))
> colnames(x) <- paste("data",1:3,sep="")
> x <- cbind(x,char=I(LETTERS[1:4]),month=month.abb[1:4])
> x
  data1 data2 data3 char month
1     1     5     9    A   Jan
2     2     6    10    B   Feb
3     3     7    11    C   Mar
4     4     8    12    D   Apr
> str(x)
'data.frame':	4 obs. of  5 variables:
 $ data1: int  1 2 3 4
 $ data2: int  5 6 7 8
 $ data3: int  9 10 11 12
 $ char :Class 'AsIs'  chr [1:4] "A" "B" "C" "D"
 $ month: Factor w/ 4 levels "Apr","Feb","Jan",..: 3 2 4 1

先の様にdata.frameは複数のベクトルが列方向に短冊のように繋がっているイメージです。
だから、整数ベクトル、文字ベクトル、そして因子ベクトルを同じオブジェクトに組み込むことができます。

そして、data.frameにcolnames属性があると、データへのアクセスにcolnamesのIDを使えます。

> x[,1]
[1] 1 2 3 4
> x[,"data1"]
[1] 1 2 3 4
> x$data1
[1] 1 2 3 4

1つ目と2つ目はmatrixでも仕える方法ですが、3つ目のx$data1はdata.frame独特のアクセス方法です。

例えばデータ数が多い場合、列番号が分からず、列名だけ分かっていることがある。こういときにアクセスしやすい。