2013-09-03 20 views
6

100 karakterlik bir sütun içeren bir veri kümem var ve yalnızca 100 satırın tamamına uygulanan bir koşulu karşılayan veri satırlarını tutmam gerekiyor. Bunu nasıl yapıyorum?Satırları çoklu sütun koşullarına göre filtrele R

varsayalım, onun altında gibi ... Ben tüm satırlar yapacaktır Col1 birini veya 2 veya 3 veya 4 Yukarıdaki örnekte> 0

Col1 Col2 Col3 Col4 
1 1 3 4 
0 0 4 2 
4 3 4 3 
2 1 0 2 
1 2 0 3 
0 0 0 0 

yerini sadece son satırın dışında satırları tutmak için gereken .. Aynı veri çerçevesine orijinal olarak yerleştirmem gerekiyor. > 0 ya da altkümeyi kullanabileceğimiz sütunlar boyunca lapply'yi kullanabileceğime emin değilim .. Herhangi bir yardım için teşekkür ederiz

Sütun indekslerini kullanabilir ve df<-subset(df,c(2:100)>0) yapabilirim. Bu bana doğru sonucu vermiyor.

cevap

11

Veri dosyanızın DF olduğunu ve ['un sizin için çalışacağını varsayalım. sütun yüzlerce varsa

> DF[DF[,1]>0 | DF[,2] >0 | DF[,3] >0 | DF[,4] >0, ] 
    Col1 Col2 Col3 Col4 
1 1 1 3 4 
2 0 0 4 2 
3 4 3 4 3 
4 2 1 0 2 
5 1 2 0 3 

Eğer Otomatik olarak data.frame sahip olur ancak sayıda sütun karşılamak için data.table kullanabileceğiniz bu alternatif yaklaşımdır

> DF[rowSums(DF)=!0, ] 
    Col1 Col2 Col3 Col4 
1 1 1 3 4 
2 0 0 4 2 
3 4 3 4 3 
4 2 1 0 2 
5 1 2 0 3 
+1

Hey i 100 küsur sütunlar varsa, Stuff 100 kez yazmanız gerektiğini Jilber, .. emin değil olacağımı? ideal ol ... lütfen bana bildirin – kaos1511

+0

Çok sayıda vektörün olması durumunda bir veri çerçevesi veya matris oluşturmalısınız ... –

+0

İlk çözüm tüm gerçek numaralar için çalışırken, ikinci çözüm negatif olmayan sayılarla sınırlıdır. –

2
dat <- read.table(header = TRUE, text = " 
    Col1 Col2 Col3 Col4 
    1 1 3 4 
    0 0 4 2 
    4 3 4 3 
    2 1 0 2 
    1 2 0 3 
    0 0 0 0 
") 

kullanabilirsiniz. İşte bir yoldur ama data.table ile bunu yapmanın daha şık bir yöntem muhtemelen var:

require(data.table) 
dt <- data.table(dat) 

dt[rowSums(dt>0)>0] 

# Col1 Col2 Col3 Col4 
# 1: 1 1 3 4 
# 2: 0 0 4 2 
# 3: 4 3 4 3 
# 4: 2 1 0 2 
# 5: 1 2 0 3 
İlgili konular