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

时间:2015-12-23 10:55:32

标签: r 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

当我选择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()。我还在na.strings期间指定了read.csv(...,na.strings = NA)参数。缺少的值不是“NA”,而是csv文件中的NA,并且在导入过程中使用它并没有改变任何东西。

5 个答案:

答案 0 :(得分:5)

要查看所需的结果,请尝试以下操作:

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

答案 1 :(得分:4)

试试这个:

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

答案 2 :(得分:2)

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

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

答案 3 :(得分:1)

是的,这显然是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

答案 4 :(得分:1)

以下是转换为data.table后将“名称”设置为键列的方法。

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