当我将在excel中创建的csv文件导入R时,我遇到了问题。包含缺失数据但带有时间戳的行以一行NA表示。
我正在使用R来处理包含传感器收集的流温度和深度测量值的大型数据集。我们以15分钟的间隔收集了大约三年的数据。数据集中有一些小洞,出于其他原因,我需要将其表示为时间戳和缺失数据的NA。这些漏洞给我带来了问题。
我将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中。当我打印数据框时,str中的一切看起来都很好;但是,在某些情况下,对于缺少临时或深度数据的行,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中创建包含生成时间和时间的测试文件来轻松地重新创建。日期系列,一些有制作的临时和深度数据和一些有NA的行。有谁知道这里发生了什么?感谢。
答案 0 :(得分:2)
没有“==”的NA。请改用is.na()
:
blah[is.na( blah$tempC ), ]
你得到所有NA的原因似乎是一个奇怪的设计决定,但我已经抱怨它,并被告知它是一成不变的。对于具有NA索引的任何行,“[”函数返回一行NA。当使用大型数据帧时,生成NA索引的一小部分行显示在输出中真是太痛苦了(.... 1%NA中的400万将填满您的控制台中的垃圾页面)。您需要在“[” - 索引中使用which
或使用...&!is.na(.)
,或在交互式会话中使用subset
。