导入后我的数据如下所示
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,并且在导入过程中使用它并没有改变任何东西。
答案 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