2015-05-05 23 views
9

Đây là cái nhìn thoáng qua() của dataframe DF của tôi:mức yếu tố Lọc R sử dụng 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... 

Tôi muốn lọc (loại bỏ) tất cả các quan sát với hai cấp độ đầu tiên của Epsilon sử dụng dplyr.

Ý tôi là:

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

Tuy nhiên, tôi không muốn sử dụng các giá trị chuỗi (ví dụ, "96002.txt" và "96004.txt") nhưng lệnh cấp (ví dụ 1 và 2), bởi vì nó nên là một hướng dẫn chung độc lập với các giá trị mức.

+1

là 'lọc (as.numeric (Epsilon) > 2) 'những gì bạn đang tìm kiếm? – nicola

+0

@nicola Tuyệt vời, đúng vậy! Xin vui lòng viết lại nó như là một câu trả lời (không phải là một bình luận) và tôi sẽ chấp nhận nó. –

+1

Như bình luận của nicola, bạn có thể chuyển đổi 'factor's thành biểu diễn số nguyên/số nguyên của chúng chỉ bằng cách áp dụng' as.numeric' hoặc 'as.integer' trên chúng (thường gây nhầm lẫn khi nó không được inteded). –

Trả lời

11

Bạn có thể dễ dàng chuyển đổi factor thành một integer và sau đó sử dụng các điều kiện trên đó. Chỉ cần thay thế tuyên bố filter của bạn với:

filter(as.integer(Epsilon)>2) 

Tổng quát hơn, nếu bạn có một vector của các chỉ số level bạn muốn loại bỏ, bạn có thể thử:

#some random levels we don't want 
nonWantedLevels<-c(5,6,9,12,13) 
#just the filter part 
filter(!as.integer(Epsilon) %in% nonWantedLevels) 
Các vấn đề liên quan