在使用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标记的行?或任何其他解决方法?
答案 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),])