なぜ書いてないのか分からないけど。is.naを使って処理しよう。
price.test<-price[!is.na(mpg.with.missing)]
あとは&を使ったりして、どうにかできる。と、このままで放置しとくと初心者の人から反感くらいそうなので、もう少し丁寧に載せとこ。
例えば、こんな感じの欠損付きデータが与えられたとする。
Stmf Ykrs Stmf Ykrs Stmf Ykrs Stmf Ykrs Stmf Ykrs 66 47 61 36 152 76 80 66 113 66 52 37 47 24 201 108 68 82 38 18 - 27 - 52 134 85 24 47 38 25 - 37 196 88 206 96 24 28 28 14 - 38 131 111 92 48 82 44 52 27
「-」となっているところは「NA」というものに置換しておく。データを読み込む。上のデータをozone.txtという名前で保存。
ozone<-read.table("ozone.txt",header=TRUE)
上のデータでは奇数番目がstmf、偶数番目がykrsなので、それぞれ読み込む。
stmf.ozone<-c(ozone[,1],ozone[,3],ozone[,5],ozone[,7],ozone[,9]) ykrs.ozone<-c(ozone[,2],ozone[,4],ozone[,6],ozone[,8],ozone[,10])
しかし、このままでは欠損付きであるから、どちらかが欠損となっているものについては省くことにする。
stmf.ozone2<-stmf.ozone[!is.na(stmf.ozone) & !is.na(ykrs.ozone)] ykrs.ozone2<-ykrs.ozone[!is.na(stmf.ozone) & !is.na(ykrs.ozone)]
こうすれば、欠損を取り除いてデータを解析することができる。
しかし、実際の車の価格のデータを解析するときなどはこのようなことをやっているとデータの数が非常に少なくなってしまう。これでは、データ全体を反映した解析ができたとは言えないので、インターネットで調べるなどして、できるだけ欠損を補うように努力しなければならない。そして、このような欠損の処理を行う。
効率よく欠損値を取り除く
欠損値を取り除くには!is.naをやって「&」で結んで行けばよいのだが、使う説明変数が流動的でかつ多いときには結構な手間になる。そういうときに有効そうな手段。complate.casesという関数を使う。以下のようなデータがあったとする。
x <- c(1,3,2,1,NA,4) y <- c(2,NA,3,2,5,4) z <- c(5,3,2,3,2,1) df <- data.frame(x,y,z)
このようなデータに対して
complate.casesという関数を使ってやると
complete.cases(df) [1] TRUE FALSE TRUE TRUE FALSE TRUE
こういう結果が返ってくるので、これをさっき説明したsubset関数に条件として放り投げてやればよい。
dfc <- subset(df, complete.cases(df)) dfc x y z 1 1 2 5 3 2 3 2 4 1 2 3 6 4 4 1
また、このような感じでもよい。
dfc2 <- df[complete.cases(df),] dfc2 x y z 1 1 2 5 3 2 3 2 4 1 2 3 6 4 4 1
こうすれば、欠損の入っているデータでも処理を割りと簡単にすることができる。
- 作者: 石田基広
- 出版社/メーカー: シーアンドアール研究所
- 発売日: 2016/06/25
- メディア: 単行本(ソフトカバー)
- この商品を含むブログ (1件) を見る