data.frame 内のすべてまたは一部の NA (欠損値) を含む行を削除する 質問する

data.frame 内のすべてまたは一部の NA (欠損値) を含む行を削除する 質問する

このデータフレーム内の次の行を削除したいと思います。

a)すべての列に s が含まれますNA。以下は私のデータ フレームの例です。

             gene hsap mmul mmus rnor cfam
1 ENSG00000208234    0   NA   NA   NA   NA
2 ENSG00000199674    0   2    2    2    2
3 ENSG00000221622    0   NA   NA   NA   NA
4 ENSG00000207604    0   NA   NA   1    2
5 ENSG00000207431    0   NA   NA   NA   NA
6 ENSG00000221312    0   1    2    3    2

基本的には、次のようなデータフレームを取得したいと思います。

             gene hsap mmul mmus rnor cfam
2 ENSG00000199674    0   2    2    2    2
6 ENSG00000221312    0   1    2    3    2

b)一部の列にのみ s が含まれているNAので、次の結果も得られます。

             gene hsap mmul mmus rnor cfam
2 ENSG00000199674    0   2    2    2    2
4 ENSG00000207604    0   NA   NA   1    2
6 ENSG00000221312    0   1    2    3    2

ベストアンサー1

こちらもチェックcomplete.cases:

> final[complete.cases(final), ]
             gene hsap mmul mmus rnor cfam
2 ENSG00000199674    0    2    2    2    2
6 ENSG00000221312    0    1    2    3    2

na.omitすべてを削除するだけなら、こちらの方が便利ですNAcomplete.casesデータフレームの特定の列のみを含めることで部分選択が可能になります。

> final[complete.cases(final[ , 5:6]),]
             gene hsap mmul mmus rnor cfam
2 ENSG00000199674    0    2    2    2    2
4 ENSG00000207604    0   NA   NA    1    2
6 ENSG00000221312    0    1    2    3    2

あなたの解決策は機能しません。 の使用を主張する場合はis.na、次のようにする必要があります。

> final[rowSums(is.na(final[ , 5:6])) == 0, ]
             gene hsap mmul mmus rnor cfam
2 ENSG00000199674    0    2    2    2    2
4 ENSG00000207604    0   NA   NA    1    2
6 ENSG00000221312    0    1    2    3    2

しかし、使用すると、complete.casesはるかに明確になり、高速になります。

おすすめ記事