【问题标题】:Understanding R - is.na and blank "" cells了解 R - is.na 和空白“”单元格
【发布时间】:2015-12-09 23:49:00
【问题描述】:

我有一个数据集。在许多不同的文件操作之前,许多单元格是“NA”

在操纵之后,无论出于何种原因,它们都变得纯粹是空的。因此,需要明确的是,以前在 excel 中为 NA 的 SAME 单元格现在完全显示为空白。没什么大不了的,对吧?

好吧,当我将数据读入 R 时,我得到...

 [1] ""                  ""                  "6.4019975396e+17" 
 [4] ""                  ""                  ""                 
 [7] ""                  ""                  "6.40275087015e+17"
[10] "6.4062774821e+17"  ""                  "6.40602341e+17"   
[13] ""                  ""                  "6.40360673735e+17"
[16] "6.40326194081e+17" "6.40326465381e+17" "6.40322363352e+17"

对我来说仍然很好,除非我跑步时

is.na(data_frame$column_name)

我全错了。每一个。我是否误解了 is.na 的工作原理?

编辑 - 这有点含糊。当然,我误解了它是如何工作的。你能解释一下为什么一个空单元格不能算作 NA 单元格吗?是否有一个快速修复可以应用于数据框以制作任何“”或为了 R 将 CSV 中的空白单元格转换为 NA 的内容?

【问题讨论】:

  • 你是如何读取数据的?
  • 另外,它们都是字符,不是数字。
  • 我使用 read.csv(file_name, colClasses="character") 读取数据。再次澄清,在 Excel 中,单元格是空白的。它们以前是字母 NA,但在对各种文件中的数据进行了多次混洗后,它们现在是空白的。如果我能让 R 使用它,这对我来说很好。
  • 试试read.csv(file_name, na.strings = c("", "NA"))。不知道为什么选择字符列,但无论哪种方式 na.strings 参数都会产生 NA
  • 这个 read.csv(file_name, na.strings = c("", "NA")) 方法效果很好。现在达到了预期的效果。非常感谢,先生。

标签: r excel missing-data


【解决方案1】:

我相信不仅 R,而且在一般编程语言中,空 "" 和 NA(在某些 null 中)也不同。

NA 是未提供任何内容或分配值的值。 "" empty 是一个字符串值。这意味着有一个空字符串。

我刚刚发现一篇关于查看数据集的有趣文章,您可以一口气查看数据集的列摘要http://www.bytefold.com/generate-metadata-for-a-dataset-in-r/

【讨论】:

  • 谢谢@GregorThomas!更新了我的声明。
【解决方案2】:

你能解释一下为什么空单元格不能算作 NA 单元格吗?

我认为,简而言之,答案是 R NA 和空 "" 是不同的。 为什么""是一个空白,而NA是真正缺失的东西——你不知道它是什么,它可能是任何东西。

NA 替换空白,事后,对于单个列,您可以这样做

data$column[data$column == ""] <- NA

为数据框中的所有列执行此操作

data = lapply(data, function(x) {x[x == ""] <- NA})

正如 cmets 中所指出的,解决问题的最佳时机是在读取数据时,使用 na.strings 参数 read.csvread.table

read.csv(file_name, na.strings = c("", "NA"))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-19
    • 1970-01-01
    • 2018-10-31
    • 1970-01-01
    • 2018-11-14
    相关资源
    最近更新 更多