R: - 为什么head()会为具有NA的列返回格式错误的输出?

时间:2016-01-07 09:55:01

标签: r dataframe

在使用head()检查数据框并以某些列为条件时,我偶尔会感到困惑。包含一些NA的列会出现此问题。 E.g。

df <- data.frame(A = rep(1:10, 10), B = c(NA, NA,  runif(98)))

这两项工作应该如下:

head(df)

head(df[df$A == 1,])

但是这个回归了一个好奇的输出:

head(df[df$B > 0.5,])

     A         B
NA   NA        NA
NA.1 NA        NA
4     4 0.6452069
5     5 0.5923567
6     6 0.7883836
10   10 0.5252390

如何省略那些用NAs标记的行?或任何其他解决方法?

3 个答案:

答案 0 :(得分:3)

只需从查询中删除这些行:

head(df[df$B > 0.5 & !is.na(df$B),])

    A         B
6   6 0.5233364
8   8 0.9972319
9   9 0.8092461
14  4 0.8309064
18  8 0.9985786
20 10 0.8305846

答案 1 :(得分:1)

正如上面的答案所说,它是关于子集的。具有NA的任何子集都具有相似的结果专注于df [1:4,]

(df$B<0.5)[1:4] 

结果

NA  NA FALSE  TRUE

然后

df[1:4,][c(NA,NA,FALSE,TRUE),]

结果

      A        B
NA   NA       NA
NA.1 NA       NA
4     4 0.069598

答案 2 :(得分:0)

我注意到使用which()也有效:

head(df[which(df$B > 0.5),])