R:数据框中的行选择包括 NA

R: Selection of rows in data frame includes NA

导入后我的数据是这样的

A = data.frame( ID= c(1,2,3,4,5,6), Name = c(NA,"A",NA,NA,NA,"B"))

>A
ID Name
1 <NA>
2    A
3 <NA>
4 <NA>
5 <NA>
6    B

我期待这个结果,当我 select Name=="A" 的所有行时:

   ID Name
2  2    A

但是,我得到 5 行:

> A[A$Name=="A",]
     ID Name
NA   NA <NA>
2     2    A
NA.1 NA <NA>
NA.2 NA <NA>
NA.3 NA <NA>

请注意,我没有查找 complete.cases(),因为数据框中还有更多的列。而且我还在 read.csv(...,na.strings = NA) 期间指定了 na.strings 参数。缺失值不是 "NA" 而是 csv 文件中的 NA 并且在导入过程中使用它并没有改变任何东西。

试试这个:

> A[which(A$Name=="A"), ]
  ID Name
2  2    A

要查看您需要的结果,试试这个:

> subset(A,Name=="A")
  ID Name
2  2    A

是的,这显然是 R 所期望的行为。

尝试

A = data.frame( ID= c(1,2,3,4,5,6), Name = c(NA,"A",NA,NA,NA,"B"))

A[A$Name=="A" & !is.na(A$Name),]
   ID Name
2  2    A

这是因为将 NA 与值进行比较等于 NA 而不是 TRUE 或 FALSE

"B" == "A"
[1] FALSE
"A" == "A"
[1] TRUE
NA == "A"
[1] NA

您也可以使用 %in% 代替 ==:

A[A$Name %in% "A", ]
#   ID Name
#2  2    A

这里有一种方法,将'Name'转换为data.table后设置为key列。

library(data.table)
setDT(A, key='Name')['A']
#   ID Name
#1:  2    A