Αφαίρεση γραμμών με όλες ή κάποιες NAs (ελλείπουσες τιμές) στο 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

Βασικά, θα ήθελα να πάρω ένα πλαίσιο δεδομένων όπως το ακόλουθο.

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

β) περιέχει NAs μόνο σε ορισμένες στήλες, ώστε να μπορώ να πάρω και αυτό το αποτέλεσμα:

             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 :

> 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 είναι καλύτερο για την απλή αφαίρεση όλων των NA's. Το complete.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 είναι αρκετά πιο ξεκάθαρη και πιο γρήγορη.

Σχόλια (10)

Δοκιμάστε na.omit(your.data.frame). Όσον αφορά τη δεύτερη ερώτηση, δοκιμάστε να τη δημοσιεύσετε ως άλλη ερώτηση (για λόγους σαφήνειας).

Σχόλια (3)

Προτιμώ τον ακόλουθο τρόπο για να ελέγξω αν οι γραμμές περιέχουν NA:


row.has.na 
Σχόλια (2)