Verwijder rijen met alle of enkele NAs (ontbrekende waarden) in data.frame

Ik wil graag de lijnen in dit dataframe verwijderen die:

a) alle kolommen NA bevatten. Hieronder staat mijn voorbeeld-dataframe.

             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

In principe zou ik graag een dataframe krijgen zoals het volgende.

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

b) bevatten NAs in slechts enkele kolommen, zodat ik ook dit resultaat kan krijgen:

             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
Oplossing

Controleer ook 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 is mooier om gewoon alle NA's te verwijderen. complete.cases maakt gedeeltelijke selectie mogelijk door alleen bepaalde kolommen van het dataframe op te nemen:

> 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

Uw oplossing kan'niet werken. Als je erop staat om is.na te gebruiken, dan moet je iets doen als:

> 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

maar complete.cases gebruiken is een stuk duidelijker, en sneller.

Commentaren (10)

Probeer na.omit(uw.data.frame). Wat betreft de tweede vraag, probeer het te posten als een andere vraag (voor de duidelijkheid).

Commentaren (3)

Ik geef de voorkeur aan de volgende manier om te controleren of rijen geen NA's bevatten:


row.has.na 
Commentaren (2)