2016-08-05 2 views
0

Я стараюсь filter все NA. Я думал, что это будет работать, но это дает мне пустую таблицу, а не то, что я ожидал:Как сохранить все NA?

data_frame(var=c(sample(letters[1:2],8,replace=8),NA,NA), 
      value=rnorm(10,10,2)) %>% 
      filter(var==is.na(var)) 
#EXPECTED 
# var  value 
# <chr>  <dbl> 
# 1 <NA> 9.119849 
# 2 <NA> 13.236334 
+0

Обсуждение NA == NA здесь ... http://stackoverflow.com/questions/25100974/na-matches-na-but-is-not-equal-to-na-why – cory

ответ

1

Нам нужно просто is.na внутри filter и не ==

d1 %>% 
    filter(is.na(var)) 
# var value 
# <chr> <dbl> 
#1 <NA> 9.119849 
#2 <NA> 13.236334 

где «d1» является data_frame

1

Если var равно NA, то is.na (var) будет TRUE. Итак, в этом случае var == is.na (var): NA == TRUE. Это не истинный оператор, поэтому он не пропускает фильтр. Я дам вам подумать о других случаях, но я просто думаю, что ваш фильтр не делает то, что вы думаете, что он делает.