Rimuovere le righe con tutti o alcuni NA (valori mancanti) in data.frame

Vorrei rimuovere le linee in questo quadro di dati che:

a) contiene NA in tutte le colonne. Di seguito il mio esempio di data frame.

             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

Fondamentalmente, vorrei ottenere un frame di dati come il seguente.

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

b) contiene NAs solo in alcune colonne, quindi posso anche ottenere questo risultato:

             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
Soluzione

Controlla anche 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 è più carino per rimuovere semplicemente tutti gli NA's. complete.cases permette una selezione parziale includendo solo alcune colonne del dataframe:

> 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

La tua soluzione non può funzionare. Se insisti ad usare is.na, allora devi fare qualcosa come:

> 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

ma usare complete.cases è molto più chiaro, e più veloce.

Commentari (10)

Prova na.omit(your.data.frame). Per quanto riguarda la seconda domanda, prova a postarla come un'altra domanda (per chiarezza).

Commentari (3)

Preferisco il seguente modo per controllare se le righe contengono dei NA:


row.has.na 
Commentari (2)