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