すべての NA 値を持ついくつかの列を含む data.frame があります。それらをdata.frameから削除するにはどうすればよいですか?
機能は使えますか?
na.omit(...)
いくつかの追加の引数を指定しますか?
それを行う1つの方法:
df[, colSums(is.na(df)) != nrow(df)]
列の NA の数が行の数と等しい場合、それは完全に NA でなければなりません。
または同様に
df[colSums(!is.na(df)) > 0]
ALLを含む列のみを削除し、s を含むいくつかの行を含む列を残したいようです。私はこれを行います(ただし、効率的なベクトル化されたソリューションがあると確信しています: NA
NA
#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
変更するだけです。all
any
別のオプションFilter
Filter(function(x) !all(is.na(x)), df)
注: @Simon O'Hanlon の投稿からのデータ。