2013-11-21 27 views
1

我將excel中創建的csv文件導入到R中時遇到了問題。包含缺失數據但包含時間戳的行被表示爲一排NAs。爲什麼R將一個單元中的NAs變成一排NAs?

我使用R來處理包含由傳感器收集的流溫度和深度測量值的大型數據集。我們每隔15分鐘就收集大約三年的這些數據。數據集中存在一些小洞,這些洞由於其他原因需要表示爲時間戳,並且缺少數據的NA。這些洞在R給我的問題。

我已經整理了excel中的所有數據,包含4列的大文件:日期,時間,深度和溫度。然後,我創建了一個時間戳所有缺少的採樣週期,並放置NA的:

date, time, temp, depth 
10/10/10, 0:00:00, 20, 3 
10/10/10, 0:15:00, 20, 3 
10/10/10, 0:30:00, NA, NA 

我在Excel文件保存爲一個CSV文件。然後,我使用read.csv()將文件導入到R中。一切都很順利,當我打印數據框時;然而,在某些情況下 - [R返回NA的的一整行的行缺少臨時或深度數據:

> str(blah) 
'data.frame': 384 obs. of 4 variables: 
$ date : Factor w/ 4 levels "10/10/10","10/11/10",..: 4 4 4 4 4 4 4 4 4 4 ... 
$ time : Factor w/ 96 levels "0:00:00","0:15:00",..: 1 2 3 4 5 6 7 8 49 50 ... 
$ tempC : int 15 15 15 15 15 15 15 15 15 15 ... 
$ depthm: int 3 3 3 3 3 3 3 3 3 3 ... 

> blah[blah$tempC == "NA",] 
     date time tempC depthm 
NA  <NA> <NA> NA  NA 
NA.1 <NA> <NA> NA  NA 

這可以很容易通過使在Excel測試文件被重新創建含有生成的時間&日期系列,一些與製造溫度和深度數據以及一些含有NAs的行。有人知道這裏發生了什麼嗎?謝謝。

回答

2

沒有「==」的NA。使用is.na()來代替:

blah[is.na(blah$tempC), ] 

你得到了所有NA的是什麼,似乎像一個奇怪的設計決定,但我已經抱怨過它,被告知,它在石頭上的演員陣容的原因。 「[」函數爲具有NA索引的任何行返回一行NA。當使用大型數據框時,讓您的輸出中生成一個NA索引的小部分行(真正的痛苦就是顯示在您的輸出中)(.1.1%的NA在400萬之內會填滿您的控制檯和垃圾頁)。您需要使用which或在您的「[」-indexing中使用...&!is.na(.),或在交互式會話中使用subset