Khi tôi sử dụng filter
từ gói dplyr
để giảm mức biến số, filter
cũng giảm giá trị NA
. Dưới đây là ví dụ:Tại sao bộ lọc của dplyr giảm giá trị NA từ một biến yếu tố?
library(dplyr)
set.seed(919)
(dat <- data.frame(var1 = factor(sample(c(1:3, NA), size = 10, replace = T))))
# var1
# 1 <NA>
# 2 3
# 3 3
# 4 1
# 5 1
# 6 <NA>
# 7 2
# 8 2
# 9 <NA>
# 10 1
filter(dat, var1 != 1)
# var1
# 1 3
# 2 3
# 3 2
# 4 2
Điều này có vẻ không lý tưởng - Tôi chỉ muốn thả các hàng ở nơi var1 == 1
.
Có vẻ như điều này xảy ra vì bất kỳ comparison with NA
returns NA
, trong đó filter
sau đó giảm xuống. Vì vậy, ví dụ: filter(dat, !(var1 %in% 1))
sẽ tạo ra kết quả chính xác. Nhưng có cách nào để yêu cầu filter
không bỏ các giá trị NA
không?
@akrun Vì lý do nào đó tôi không nhận được thông báo này: P. Vâng tôi nghĩ rằng OP đã biết về điều này, như ông đã đề cập 'lọc (dat,! (Var1% trong% 1))' đó là tương tự, nhưng tôi nghĩ rằng đây sẽ là cách duy nhất để làm điều đó với 'dplyr :: bộ lọc'. – LyzandeR
Tôi không nghĩ rằng có một cách rõ ràng để nói 'bộ lọc' không giảm' NA' giá trị nhưng nói chung, các truy vấn NA hợp lý có thể được xử lý bằng cách sử dụng toán tử '% in%' cơ sở và phủ định, được định nghĩa là ' % ni% <- Phủ nhận ('% in%') '. Vì vậy, bạn có thể sử dụng 'bộ lọc (dat, var1% ni% 1)' mà sẽ làm việc. Xem http://stackoverflow.com/a/11303276/4269699 và http://stackoverflow.com/a/27015823/4269699 – wjchulme
Có, tôi đã biết về cả phương pháp này và cách tiếp cận mà @LyzandeR sử dụng cho câu trả lời . Dường như bộ lọc không có tùy chọn rõ ràng cho "giữ NA", vì vậy các cách giải quyết này sẽ ổn. Cảm ơn bạn đã giúp đỡ. –