在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会排除他们。
答案 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))