2013-09-03 22 views
6

Załóżmy, że mam zestaw danych, który ma 100 kolumn nieparzystych i muszę zachować tylko te wiersze w danych, które spełniają jeden warunek zastosowany we wszystkich 100 kolumnach. Jak to zrobić?Filtrowanie wierszy na podstawie warunków z wieloma kolumnami R

Załóżmy, jego jak poniżej ... Muszę tylko trzymać wiersze gdzie jeden z Col1 lub 2 lub 3 lub 4 jest> 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 

W powyższym przykładzie, z wyjątkiem ostatniego wiersza wszystkie wiersze uczyni go .. Muszę umieścić wyniki w tej samej ramce danych co oryginał. nie jestem pewien, czy mogę użyć lapply do przechodzenia przez kolumny, w których> 0 lub mogę używać podzbioru. Każda pomoc jest ceniona

Czy mogę używać indeksów kolumn i robić df<-subset(df,c(2:100)>0). To nie daje mi właściwego wyniku.

Odpowiedz

11

Załóżmy, że twoja data.frame to DF, a następnie za pomocą [ wykonasz pracę za Ciebie.

> 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 

Jeśli masz setki kolumn można użyć tego alternatywnego podejścia

> 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

Hej Jilber, co zrobić, jeśli mam 100 nieparzyste kolumny, mam wpisać rzeczy 100 razy .. Nie jestem pewien, że? bądź idealny ... proszę dać mi znać – kaos1511

+0

Musisz utworzyć ramkę danych lub macierz, jeśli masz dużo wektorów ... –

+0

Podczas gdy pierwsze rozwiązanie działa dla wszystkich liczb rzeczywistych, drugie rozwiązanie jest ograniczone do liczb nieujemnych. –

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 
") 

Można użyć data.table aby automatycznie dostosować się jednak wiele kolumn Twój data.frame zdarza się mieć. Oto jeden ze sposobów, ale nie ma chyba bardziej elegancki sposób to zrobić z data.table:

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 
Powiązane problemy