почему г не исключает НС с фильтрами - PullRequest
0 голосов
/ 24 мая 2018

В RI есть кадр данных d ниже, и в результате я получаю NA, поэтому X> 5 включает в себя NA.По какой причине R не исключает NA?

d =data.frame(group=c("NA","NA","a","b"),x = c(NA,NA,9,5),y = c(1,2,3,4))
d[d$x>5,]

Я знаю, что dplyr исключит их.

Ответы [ 2 ]

0 голосов
/ 24 мая 2018

Основное правило, как описано в Advanced-R:

Отсутствующее значение в индексе всегда приводит к отсутствующему значению в выходных данных:

 x <- c(2.1, 4.2, 3.3, 5.4)
 x[c(TRUE, TRUE, NA, FALSE)]
 ## [1] 2.1 4.2  NA

Егодовольно легко понять логику в контексте data.frame с множеством примеров.Теоретически сложно объяснить четко.Взгляните на следующие примеры и посмотрите на правило, описанное в конце:

d[c(NA, NA, NA, NA), ]

#       group  x  y
# NA    <NA> NA NA
# NA.1  <NA> NA NA
# NA.2  <NA> NA NA
# NA.3  <NA> NA NA

d$x>5
#[1]    NA    NA  TRUE FALSE

d[c(TRUE, FALSE, FALSE, NA), ]

#    group  x  y
# 1     NA NA  1
# NA  <NA> NA NA

#And Finally:

d[c(NA, NA, TRUE, FALSE), ]    # matches with d[d$x>5,]

#      group  x  y
# NA    <NA> NA NA
# NA.1  <NA> NA NA
# 3        a  9  3

Теперь можно понять поведение TRUE/FALSE/NA при выборе индекса строки:

TRUE  -- Row is selected
FALSE -- Row is not selected
NA    -- Row is selected in indeterminate stage. Meaning all columns will have NA 

Пример данных: ( Как указано в OP )

d =data.frame(group=c("NA","NA","a","b"),x = c(NA,NA,9,5),y = c(1,2,3,4))
0 голосов
/ 24 мая 2018

Правильный синтаксис:

> d[which(d$x>5),]
  group x y
3     a 9 3

Если вы выполните тест:

NA > 5

Вы получите вывод:

[1] NA

То же самое здесь:

> d[NA,]
     group  x  y
NA    <NA> NA NA
NA.1  <NA> NA NA
NA.2  <NA> NA NA
NA.3  <NA> NA NA
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...