トップ «前の日記(2020年02月01日) 最新 次の日記(2020年02月25日)» 編集

役に立たない情報


2020年02月21日 [R基礎]データフレームでNAがある場合の検索

_ [R基礎] データフレームの作り方

とりあえずRで何かデータを扱うとき,データフレームを扱えなければ話にならないのね.CSVからでもデータを読むととりあえずデータフレームに収まっちゃう.で,Rって便利なので2次元マトリクス状のデータフレームは普通に作れちゃうんだけど,それを扱う方法をまず書いておく.

で,行列はc関数でさっくり作れるのね.

> x <- c(160,171,165,150,148,183)
> y <- c(70,68,49,49,50,78)
> z <- c(0,0,1,1,NA,0)

NAってのは欠損値のことで,スパースなデータってのは実験上わりと出てくる.例えばRでCSVからファイルを読み取る場合,欠損値のところはNAになる.んで,この欠損値が入ったまま検索すると期待した結果が得られないのね.NAは欠損値(NULLではない)だから検索結果にNAの行が入ってくる.

とりあえず上のx, y, zをデータフレームにして表にしてみよう

> db <- data.frame("height"=x, "weight"=y, "s"=z)
> db
  height weight  s
1    160     70  0
2    171     68  0
3    165     49  1
4    150     49  1
5    148     50 NA
6    183     78  0
>

_ [R基礎]データフレームでNAがある場合の検索

んで,これをs==1とかで検索するとこうなる

> db[db$s==1,]
   height weight  s
3     165     49  1
4     150     49  1
NA     NA     NA NA
>

これだと検索結果にNAの行が出てくるので,こんなデータは普通いらないよね?で,データフレーム内のNAが含まれている行をすべて削除する場合は

> db <- db[complete.cases(db),]

もしくはdb$sのNAだけを削除したい場合は

> db <- db[!is.na(db$s),]

こうするとNAが含まれる行を削除してくれる.

> db[db$s==1,]
  height weight s
3    165     49 1
4    150     49 1

いいね!

参考文献:R documentation, complete.cases, R documentation, is.na