2013-07-12 29 views
4

假設我們有一個數據幀,象這樣NA值與NA查找條目檢索數據幀的子集,在特定列

>data 
A B C D 
1 3 NA 4 
2 1 3 4 
NA 3 3 5 
4 2 NA NA 
2 NA 4 3 
1 1 1 2 

我想知道的一般方法與檢索的data子集NA值爲CA。所以輸出應該是,

A B C D 
1 3 NA 4 
NA 3 3 5 
4 2 NA NA 

我嘗試使用子命令,像這樣,subset(data, A==NA | C==NA),但沒有奏效。有任何想法嗎?

+3

讀'幫助(is.na )'。 – Roland

+0

比較A == NA總是返回FALSE。這是故意的。 – smci

回答

9

這是一個可能性:

# Read your data 
data <- read.table(text=" 
A B C D 
1 3 NA 4 
2 1 3 4 
NA 3 3 5 
4 2 NA NA 
2 NA 4 3 
1 1 1 2",header=T,sep="") 

# Now subset your data 
subset(data, is.na(C) | is.na(A)) 
    A B C D 
1 1 3 NA 4 
3 NA 3 3 5 
4 4 2 NA NA 
+0

這就是我正在尋找的!它易於記憶,易於閱讀。謝謝! –

12

這些樣的東西是complete.cases一個非常方便的功能。它檢查行爲NA,如果有的話返回FALSE。如果沒有NAs,則返回TRUE。

所以,你需要子集只是你的數據的兩列,然後使用complete.cases(.)negate它和子集的那些行從原始數據備份,如下所示:

# assuming your data is in 'df' 
df[!complete.cases(df[, c("A", "C")]), ] 
# A B C D 
# 1 1 3 NA 4 
# 3 NA 3 3 5 
# 4 4 2 NA NA