我有一个数据集,对于某些列(比如说,"USD.Pricel")的某些行中含有NA(在这些行中的其他列中没有NA),我试图将这些含有NA的行子集出来。我有两种方法。1) df[df$`USD.Price/l`=="NA",]
2) df[is.na(df$`USD.Price/l`),]
虽然第二种方法可以完美地工作,但为什么第一种方法给出了正确的大小,但每一行和每一列的所有NA?
问题还在于 ==
返回 NA
凡是 NA
元素。 还有: NA
不是 "NA"
引述
v1 <- c(NA, 3, 5, NA)
v1 == "NA"
#[1] NA FALSE FALSE NA
或不加引号
v1 == NA
#[1] NA NA NA NA
正确的做法是 is.na
或 complete.cases
complete.cases(v1) # returns TRUE where there are no NA
#[1] FALSE TRUE TRUE FALSE
is.na(v1) # returns TRUE where there are NAs
#[1] TRUE FALSE FALSE TRUE
如果我们检查 ?
缺失值(NA)和NaN值被认为是不可比较的,甚至与它们本身也是不可比较的,所以涉及它们的比较总是会导致NA。当比较字符串时,如果其中一个字符串在当前的校验语言中无效,也会导致缺失值。