2011-11-02 46 views
55

我們有一個CSV文件的數據框。數據幀DF有包含觀測值的列和包含已進行測量的日期的列(VaR2)。如果未記錄日期,則CSV文件包含值爲NA的缺失數據。在數據框的選定列中包含NA(缺失)值的行的子集

Var1 Var2 
10 2010/01/01 
20 NA 
30 2010/03/01 

我們想用所述子集的命令來定義一個新的數據幀new_DF使得其僅包含具有從塔(VaR2)的NA'值的行。在給出的例子中,只有第2行將包含在新的DF中。

命令

new_DF<-subset(DF,DF$Var2=="NA") 

不工作,所得到的數據幀沒有行條目。

如果在原始CSV文件中將值NANULL進行了交換,則相同的命令會生成所需的結果:new_DF<-subset(DF,DF$Var2=="NULL")

如何在原始CSV文件中提供值爲NA的字符串?

回答

92

切勿使用=='NA'來測試缺失值。改爲使用is.na()。這應做到:

new_DF <- DF[rowSums(is.na(DF)) > 0,] 

或者如果你想查詢的特定列,您還可以使用

new_DF <- DF[is.na(DF$Var),] 

如果您有NA字符值,第一次運行

Df[Df=='NA'] <- NA 

用缺失值替換它們。

+2

感謝您的快速回答(這很快)!事實上,由於數據的csv傳遞,'NA'是字符值,您的第二個陳述可能非常有用。你能否澄清你的第一個陳述? rowSums()的使用對我來說不是很清楚,因爲我只會檢查一個特定的列(有很多列)。如果那個特定的列(在這個例子中是列Var2)有一個'NA'字符串(我將用你的第二條語句替換它),那麼我想選擇整行作爲新數據幀的一部分。 – John

+0

@John:更新。關鍵是使用is.na,我錯誤地解釋你想檢查所有變量。 –

+3

應該是'new_DF < - DF [is.na(DF $ Var),]'',即似乎有一個額外的'('DF'之後的括號''' – PatrickT

34

NA是R中的一個特殊值,不要將NA值與「NA」字符串混淆。根據數據導入的方式,您的「NA」和「NULL」單元格可能具有各種類型(默認行爲是將「NA」字符串轉換爲NA值,並按原樣放置「NULL」字符串)。

如果使用read.table()或read.csv(),您應該考慮使用「na.strings」參數來執行乾淨的數據導入,並始終使用真實的R NA值。

一個例子,在這兩種情況下工作的 「NULL」 和 「NA」 細胞:

DF <- read.csv("file.csv", na.strings=c("NA", "NULL")) 
new_DF <- subset(DF, is.na(DF$Var2)) 
+1

感謝您的回答。如果我理解正確在Joris的例子中,第一條語句的做法與Df [Df =='NA'] < - NA相同嗎?(小的)不同之處在於它在開始時直接在你的語句中完成,當數據幀(這是一個非常乾淨的編程方法,因此我喜歡它) – John

+0

Joris建議用NA值替換「NA」字符串,這裏我只建議使用read.table的「na.strings」特性()來達到同樣的目的 – maressyl

+0

Joris的答案實際上是完成這個壯舉的「首選」方法(如果你是在腳本中編寫這個方法的話)參見:http://stackoverflow.com/questions/9860090/in- r-why-is-better-subset- – Jonathan

-1

打印所有的行與NA數據:

tmp <- data.frame(c(1,2,3),c(4,NA,5)); 
tmp[round(which(is.na(tmp))/ncol(tmp)),] 
+0

@ZheyuanLi如果你不喜歡這個答案,只需簡單地將它投票。編輯推薦標記的答案不是合適的行爲。如果您覺得有必要,請發表評論。 –

5

complete.cases給出了在TRUE時所有的值行不是NA

DF[!complete.cases(DF), ] 
+0

迄今最快。 –

1

請嘗試更改此項:

new_DF<-dplyr::filter(DF,is.na(Var2)) 
+0

你能解釋爲什麼這個工作,這是什麼等? – csilk

+0

new_DF <-dplyr :: filter(DF,is.na(Var2))它基本上使用dplyr軟件包的過濾函數,並過濾掉Var2列中滿足條件的任何觀察結果,即它們用NA – drhnis

+0

'library(dplyr)'後面更好地表示爲'DF%>%filter(is.na(Var2))'。 – Joe

相關問題