Θα ήθελα να αφαιρέσω τις γραμμές σε αυτό το πλαίσιο δεδομένων που:
Παρακάτω είναι το πλαίσιο δεδομένων του παραδείγματός μου.
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
β) περιέχει NA
s μόνο σε ορισμένες στήλες, ώστε να μπορώ να πάρω και αυτό το αποτέλεσμα:
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
είναι αρκετά πιο ξεκάθαρη και πιο γρήγορη.
Δοκιμάστε na.omit(your.data.frame)
. Όσον αφορά τη δεύτερη ερώτηση, δοκιμάστε να τη δημοσιεύσετε ως άλλη ερώτηση (για λόγους σαφήνειας).
Προτιμώ τον ακόλουθο τρόπο για να ελέγξω αν οι γραμμές περιέχουν NA:
row.has.na <- apply(final, 1, function(x){any(is.na(x))})
Αυτό επιστρέφει λογικό διάνυσμα με τιμές που δηλώνουν αν υπάρχει κάποιο NA σε μια γραμμή. Μπορείτε να το χρησιμοποιήσετε για να δείτε πόσες γραμμές θα πρέπει να εγκαταλείψετε:
sum(row.has.na)
και τελικά να τις απορρίψετε
final.filtered <- final[!row.has.na,]
Για το φιλτράρισμα γραμμών με συγκεκριμένο μέρος των NAs γίνεται λίγο πιο δύσκολο (για παράδειγμα, μπορείτε να τροφοδοτήσετε το 'final[,5:6]' στο 'apply'). Γενικά, η λύση του Joris Meys' φαίνεται να είναι πιο κομψή.