2013-11-21 26 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