2011-08-17 44 views
7

ile kaldırın. Sütun genlerinin bir faktör olduğu x gibi bir veri çerçevem ​​var. Sütun genlerinin hiçbir şey içermediği tüm satırları kaldırmak istiyorum. Tablo X'de 4. satırı kaldırmak istiyorum. Bunu büyük bir veri çerçevesi için yapmanın bir yolu var mı?Veri çerçevesindeki satırları ""

X 
names values genes 
1 A 0.2876113 EEF1A1 
2 B 0.6681894 GAPDH 
3 C 0.1375420 SLC35E2 
4 D -1.9063386   
5 E -0.4949905 RPS28 

Son olarak sonuç:

X 
names values genes 
1 A 0.2876113 EEF1A1 
2 B 0.6681894 GAPDH 
3 C 0.1375420 SLC35E2 
5 E -0.4949905 RPS28 

teşekkür ederiz!

cevap

22

Boş değerler sorunuza tamamen ortada değil ne, ama (ben 'boş' değerler boş dizeler varsayıyorum burada) çözüm aşağıda benimsemek gerekir:

toBeRemoved<-which(X$genes=="") 
X<-X[-toBeRemoved,] 
+0

! teşekkürler Nick Sabbe! – Lisann

+2

Muhtemelen bir "droplevels()" istediğin "*" * * seviyesinden kurtulmak istersiniz: "droplevels (X [-toBeRemoved,])" –

+4

Alternatif olarak, altkümeyi (X, genler) yapabilirsiniz. ! = "") ' – nullglob

10

@ Nick Sabbe büyük bir cevap verdi, ancak bir uyarısı var:

-which(...) kullanımı, çıkarılması gereken birkaç öğe olduğunda altlık işlemini hızlandırmak için (bazen) net bir numaradır.

... Ancak, öğesinin kaldırılması için öğesinin olmaması durumunda, başarısız olur! X$genesdeğil herhangi bir boş dizeleri içeren yaparsa

Yani, which boş tamsayı vektörü dönecektir. Hala boş bir vektör olduğunu onaylama. Ve X [integer (0)] boş bir data.frame döndürür!

toBeRemoved <- which(X$genes=="") 
if (length(toBeRemoved>0)) { # MUST check for 0-length 
    X<-X[-toBeRemoved,] 
} 

Veya, hız kazancı basit, önemli değilse: @nullglob belirttiği gibi,

X<-X[X$genes!="",] 

Veya tam wat i gereklidir

subset(X, genes != "") 
+0

Mükemmel uyarı. Ayrıca eğer olabilir (uzunluk (toBeRemoved)) {'. Daha fazla gözlem: 'subset' kullanıldığında,' 'na (X $ genler)' DOĞRU olduğu tüm satırları da kaldırır. –

İlgili konular