Bu veri çerçevesindeki satırları kaldırmak istiyorum:
a) tüm sütunlarda NA
lar 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
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üm
NA'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.
Satırların NA içerip içermediğini kontrol etmek için aşağıdaki yolu tercih ediyorum:
row.has.na <- apply(final, 1, function(x){any(is.na(x))})
Bu, bir satırda herhangi bir NA olup olmadığını belirten değerlere sahip mantıksal vektör döndürür. Kaç satırı atmanız gerektiğini görmek için kullanabilirsiniz:
sum(row.has.na)
ve sonunda onları düşürmek
final.filtered <- final[!row.has.na,]
NA'ların belirli bir kısmına sahip satırları filtrelemek için biraz daha zor hale gelir (örneğin, 'final[,5:6]' öğesini 'apply' öğesine besleyebilirsiniz). Genel olarak, Joris Meys' çözümü daha zarif görünüyor.