2015-05-05 15 views
9

To spojrzenie() mojego dataframe DF:poziomy czynnika filtr R wykorzystujące dplyr

Observations: 221184 
Variables: 
$ Epsilon (fctr) 96002.txt, 96002.txt, 96004.txt, 96004.txt, 96005.txt, 960... 
$ Value (int) 61914, 61887, 61680, 61649, 61776, 61800, 61753, 61725, 616... 

Chcę filtrować (usunąć) wszystkie obserwacje z dwóch pierwszych poziomach Epsilon korzystających dplyr.

Znaczy:

DF %>% filter(Epsilon != "96002.txt" & Epsilon != "96004.txt") 

Jednak nie chcę użyć wartości ciągu (czyli "96002.txt" i "96004.txt"), ale rozkazy poziomu (czyli 1 i 2), ponieważ powinna być ogólną instrukcją niezależną od wartości poziomu.

+1

jest 'filtr (as.numeric (epsilon) > 2) 'czego szukasz? – nicola

+0

@nicola Świetne, to jest! Proszę przepisać to jako odpowiedź (nie komentarz), a ja to zaakceptuję. –

+1

Jak komentuje nicola, możesz przekonwertować 'factor's na ich numeryczną/całkowitą reprezentację, stosując tylko' as.numeric' lub 'as.integer' (co często powoduje zamieszanie, gdy nie jest wprowadzone). –

Odpowiedz

11

Możesz łatwo przekonwertować factor na integer, a następnie użyć warunków na nim. Wystarczy wymienić swoje oświadczenie filter z:

filter(as.integer(Epsilon)>2) 

Ogólniej, jeśli masz wektor wskaźników poziomu chcesz wyeliminować, można spróbować:

#some random levels we don't want 
nonWantedLevels<-c(5,6,9,12,13) 
#just the filter part 
filter(!as.integer(Epsilon) %in% nonWantedLevels) 
Powiązane problemy