2015-12-23 40 views
1

我的數據是這樣的導入後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 

我想到這個結果,當我選擇與名稱==「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並且在導入過程中與其一起玩並沒有改變任何東西。

回答

5

要查看您所需要的結果,試試這個:

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

試試這個:

> A[which(A$Name=="A"), ] 
    ID Name 
2 2 A 
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 
2

您還可以使用%in%代替==:轉換爲data.table

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

這裏是一個方式,通過設置「名稱」作爲鍵列。

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