为什么R将一个单元中的NA转换为一行NA?

时间:2013-11-21 17:20:39

标签: r excel csv

当我将在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的行。有谁知道这里发生了什么?感谢。

1 个答案:

答案 0 :(得分:2)

没有“==”的NA。请改用is.na()

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

你得到所有NA的原因似乎是一个奇怪的设计决定,但我已经抱怨它,并被告知它是一成不变的。对于具有NA索引的任何行,“[”函数返回一行NA。当使用大型数据帧时,生成NA索引的一小部分行显示在输出中真是太痛苦了(.... 1%NA中的400万将填满您的控制台中的垃圾页面)。您需要在“[” - 索引中使用which或使用...&!is.na(.),或在交互式会话中使用subset