97

すべての NA 値を持ついくつかの列を含む data.frame があります。それらをdata.frameから削除するにはどうすればよいですか?

機能は使えますか?

na.omit(...) 

いくつかの追加の引数を指定しますか?

4

7 に答える 7

138

それを行う1つの方法:

df[, colSums(is.na(df)) != nrow(df)]

列の NA の数が行の数と等しい場合、それは完全に NA でなければなりません。

または同様に

df[colSums(!is.na(df)) > 0]
于 2013-04-12T10:25:28.330 に答える
26

ALLを含む列のみを削除し、s を含むいくつかの行を含む列を残したいようです。私はこれを行います(ただし、効率的なベクトル化されたソリューションがあると確信しています: NANA

#set seed for reproducibility
set.seed <- 103
df <- data.frame( id = 1:10 , nas = rep( NA , 10 ) , vals = sample( c( 1:3 , NA ) , 10 , repl = TRUE ) )
df
#      id nas vals
#   1   1  NA   NA
#   2   2  NA    2
#   3   3  NA    1
#   4   4  NA    2
#   5   5  NA    2
#   6   6  NA    3
#   7   7  NA    2
#   8   8  NA    3
#   9   9  NA    3
#   10 10  NA    2

#Use this command to remove columns that are entirely NA values, it will leave columns where only some values are NA
df[ , ! apply( df , 2 , function(x) all(is.na(x)) ) ]
#      id vals
#   1   1   NA
#   2   2    2
#   3   3    1
#   4   4    2
#   5   5    2
#   6   6    3
#   7   7    2
#   8   8    3
#   9   9    3
#   10 10    2

任意の値を持つ列を削除したい状況に陥った場合は、上記のコマンドを にNA変更するだけです。allany

于 2013-04-12T10:14:24.733 に答える
19

別のオプションFilter

Filter(function(x) !all(is.na(x)), df)

注: @Simon O'Hanlon の投稿からのデータ。

于 2016-03-17T11:59:11.170 に答える