【问题标题】:Why does R turns NAs in one cell to a row of NAs?为什么 R 将一个单元格中的 NA 变成一行 NA?
【发布时间】:2013-12-06 07:43:30
【问题描述】:

当我将在 excel 中创建的 csv 文件导入 R 时遇到问题。包含缺失数据但带有时间戳的行以一行 NA 表示。

我正在使用 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。 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。有谁知道这里发生了什么?谢谢。

【问题讨论】:

    标签: r excel csv


    【解决方案1】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多