備忘録です。
下記のようなデータフレームがあった際に、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を利用して削除する方法を記載します。
方法の大まかな流れは下記のとおりです。
- NAを含む列の名前を取得する
- 取得した列名を利用して、元のデータフレームから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 |
正直、これ以外にもスマートな方法があるかもしれないので、ご存じの方がいたらご教示いただきたいです。