データ解析をするときに、何が一番困るってデータハンドリングだと思う*1。欠損があったときにどう処理しようかとか、行を追加したとか、そういうときの細々したところがさくさくできると、本題の解析に時間をかけるようになれていいかなと思ったので、書いてみる。
データフレームとは
データフレームとは見た目は行列みたいなもので、列にラベルを持っていて、ラベルによる操作が可能なもの。と、言われてもよく分からないので、具体的に説明。sex <- c("F","F","M","M","M") height <- c(158,162,177,173,166) weight <- c( 51, 55, 72, 57, 64)
こんな感じのデータがあるとする。下のようなデータをread.table(,head=TRUE)で読み込んできてもよい。
sex height weight F 158 51 F 162 55 M 177 72 M 173 57 M 166 64
こんなデータを以下のような感じで読み込む。
x<-data.frame(sex,height,weight) #x<-data.frame(sex=sex,height=height,weight=weight)ラベルを付け変えるなら、こっちでもよい
途中でnameという列を付け加えたくなったら、
x<-transform(x,name=name) > x name sex height weight 1 A F 158 51 2 B F 162 55 3 C M 177 72 4 D M 173 57 5 E M 166 64
という風にやればよい。また、行を減らしたいと思ったら
x<-subset(x,select=-c(name)) > x sex height weight 1 F 158 51 2 F 162 55 3 M 177 72 4 M 173 57 5 M 166 64
とやればよい。subsetは条件を満たすデータを抽出するような関数。selectで残すやつを選ぶのだが、「-」を付けてやるとそれらを除くという操作を行う。このやり方はいくつかの列を取り除きたいときにはいいが、除きたいほうがたくさんあるときは残すほうを指定した方が早い。そっちのやり方は下のほう。
transform(x[,c(2,3)]) sex height 1 F 158 2 F 162 3 M 177 4 M 173 5 M 166
のような使いかたができる。でも、こっちだと名前の指定ができないのが嫌だなぁ。
subsetはこんな感じの使いかたもできる。
subset(x,sex=="M",c(weight,name)) weight name 3 72 C 4 57 D 5 64 E
性別が男の人のweightとnameを表示。
データセットにたくさんのラベルが含まれるようになって、どんなものが含まれているか見たくなったときは
names(x) [1] "name" "sex" "weight" "height"
とやればよい。変数の数を作りすぎた時に有効。
*1:個人的にね。