2016-06-17 6 views
9

次の例のデータセットではna.omit(data)を使用しますが、存在する場合にのみNAを使用して行を削除する条件では、列の「30%以上」と言います。NAsを含む行が特定の割合以上の列に存在する場合にのみ行を削除する方法はありますか?

データ:

 C1  C2  C3  C4  C5 
Gene1 0.07 NA  0.05 0.07 0.07 
Gene2 0.2 0.18 0.16 0.15 0.15 
Gene3 NA  0.93 0.9 NA  0.92 
Gene4 0.32 0.05 0.12 0.13 0.05 
Gene5 0.44 0.53 0.46 0.03 0.47 
Gene6 NA  0.34 NA  0.8 NA 
Gene7 0.49 0.55 0.67 0.49 0.89 
Gene8 0.25 NA  0.49 NA  NA 
Gene9 0.1 0.1 0.05 NA  0.09 

次のように結果のファイルは次のようになります。助けを

 C1  C2  C3  C4  C5 
Gene1 0.07 NA  0.05 0.07 0.07 
Gene2 0.2 0.18 0.16 0.15 0.15 
Gene4 0.32 0.05 0.12 0.13 0.05 
Gene5 0.44 0.53 0.46 0.03 0.47 
Gene7 0.49 0.55 0.67 0.49 0.89 
Gene9 0.1 0.1 0.05 NA  0.09 

ありがとう!

+0

を適用する使用して別のバージョンでありますどの「NA」値を削除するかを決定しますか? –

+0

こんにちはTim、それはどのNAsに依存しません。特定の行に対して30%以上のNAsが存在する場合にのみ、その行を完全に削除する必要があります。 – Letin

+0

あなたは何を試みましたか?いくつかのコードを表示します。 –

答えて

7

あなたはNA値の行の合計に基づいてサブセットのことができます。ここでは

test[!rowSums(is.na(test)) > ncol(test)*.3,] 

     C1 C2 C3 C4 C5 
Gene1 0.07 NA 0.05 0.07 0.07 
Gene2 0.20 0.18 0.16 0.15 0.15 
Gene4 0.32 0.05 0.12 0.13 0.05 
Gene5 0.44 0.53 0.46 0.03 0.47 
Gene7 0.49 0.55 0.67 0.49 0.89 
Gene9 0.10 0.10 0.05 NA 0.09 
+7

私は 'dat [rowMeans(is.na(dat))<= .3、]' –

4

Reduce

df1[!Reduce(`+`, lapply(df1, is.na)) > ncol(df1)*0.3,] 
#  C1 C2 C3 C4 C5 
#Gene1 0.07 NA 0.05 0.07 0.07 
#Gene2 0.20 0.18 0.16 0.15 0.15 
#Gene4 0.32 0.05 0.12 0.13 0.05 
#Gene5 0.44 0.53 0.46 0.03 0.47 
#Gene7 0.49 0.55 0.67 0.49 0.89 
#Gene9 0.10 0.10 0.05 NA 0.09 
+2

datに行きました[Reduce( '+'、lapply(dat、is.na))

4

そして、ここでもう一つの選択肢であるか

dat[apply(dat,1,function(x){sum(is.na(x))/dim(dat)[2]})<0.3,] 

#C1 C2 C3 C4 C5 
#Gene1 0.07 NA 0.05 0.07 0.07 
#Gene2 0.20 0.18 0.16 0.15 0.15 
#Gene4 0.32 0.05 0.12 0.13 0.05 
#Gene5 0.44 0.53 0.46 0.03 0.47 
#Gene7 0.49 0.55 0.67 0.49 0.89 
#Gene9 0.10 0.10 0.05 NA 0.09 
関連する問題