Remover linhas com todas ou algumas NAs (valores em falta) no data.frame

I'gostaria de remover as linhas neste quadro de dados que:

a) contenha NAs em todas as colunas. Abaixo está o meu quadro de dados de exemplo.

             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

Basicamente, I'gostaria de obter um quadro de dados como o seguinte.

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

b) contenha NAs apenas em algumas colunas, para que eu também possa obter este resultado:

             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
Solução

Verifique também 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" é mais agradável por apenas remover todos os "NAs". O `complete.cases' permite a seleção parcial, incluindo apenas certas colunas do quadro de dados:

> 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

A sua solução não pode funcionar. Se você insiste em utilizar o is.na, então você tem que fazer algo como:

> 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

mas utilizar `complete.cases' é muito mais claro, e mais rápido.

Comentários (10)

Tente na.omit(your.data.frame). Quanto à segunda pergunta, tente lançá-la como outra pergunta (para maior clareza).

Comentários (3)

Prefiro a seguinte forma de verificar se as filas contêm alguma AN:


row.has.na 
Comentários (2)