Data.frame'de tamamı veya bazıları NA (eksik değerler) olan satırları kaldırın

Bu veri çerçevesindeki satırları kaldırmak istiyorum:

a) tüm sütunlarda NAlar içerir. Aşağıda örnek veri çerçevem bulunmaktadır.

             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

Temel olarak, aşağıdaki gibi bir veri çerçevesi elde etmek istiyorum.

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

b) sadece bazı sütunlarda NA içerir, böylece bu sonucu da elde edebilirim:

             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
Çözüm

Ayrıca complete.cases adresini de kontrol edin:

> 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.omitsadece tümNA'ları kaldırmak için daha iyidir.complete.cases` veri çerçevesinin yalnızca belirli sütunlarını dahil ederek kısmi seçime izin verir:

> 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

Çözümünüz işe yaramaz. Eğer is.na kullanmakta ısrar ediyorsanız, o zaman şöyle bir şey yapmanız gerekir:

> 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

ancak complete.cases kullanmak çok daha anlaşılır ve hızlıdır.

Yorumlar (10)

na.omit(your.data.frame)` öğesini deneyin. İkinci soruya gelince, bunu başka bir soru olarak göndermeyi deneyin (netlik için).

Yorumlar (3)

Satırların NA içerip içermediğini kontrol etmek için aşağıdaki yolu tercih ediyorum:


row.has.na 
Yorumlar (2)