为什么r不会使用过滤器

时间:2018-05-24 17:08:32

标签: r

在R中我有下面的d数据帧,我在结果中得到NA,所以X> 5包括NA。 R不排除NAs的原因是什么?

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 :(得分:1)

正确的语法是:

> 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

答案 1 :(得分:0)

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))