LoginSignup
7
6

More than 3 years have passed since last update.

RでNAを含む列を削除する手段

Posted at

備忘録です。

下記のようなデータフレームがあった際に、NAを含む列を削除したい思いに駆られることがあることが多い可能性が高いかもしれません。
(下記の場合はA,C列)

data <- data.frame(id = seq(1, 5, 1),
                   A = c(11, 12, NA, 14, 15),
                   B = c(21, 22, 23, 24, 25),
                   C = c(31, NA, 33, 34, 35))
id A B C
1 11 21 31
2 12 22 NA
3 NA 23 33
4 14 24 34
5 15 25 35

その際に、dplyrを利用して削除する方法を記載します。

方法の大まかな流れは下記のとおりです。

  1. NAを含む列の名前を取得する
  2. 取得した列名を利用して、元のデータフレームからNAを含む列を削除する

事前準備

#パッケージ読み込み
library(dplyr)
#データフレーム作成
data <- data.frame(id = seq(1, 5, 1),
                   A = c(11, 12, NA, 14, 15),
                   B = c(21, 22, 23, 24, 25),
                   C = c(31, NA, 33, 34, 35))

NAを含む列の名前を取得する

NA_colnames <-data %>%
  select_if(function(x) any(is.na(x))) %>%
  colnames()

NA_colnames

結果は下記です。

NA_colnames
[1] "A" "C"

select_if内でfunction(x)を利用するのがポイントです。

ここまでくれば後はイージーですね。

取得した列名を利用して、元のデータフレームからNAを含む列を削除する

data_without_NA <- data %>%
  select(-NA_colnames)

data_without_NA

結果は下記です。

id B
1 21
2 22
3 23
4 24
5 25

正直、これ以外にもスマートな方法があるかもしれないので、ご存じの方がいたらご教示いただきたいです。

7
6
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
6