【问题标题】:How can I get rid of NA values on data import in R?如何摆脱 R 中数据导入的 NA 值?
【发布时间】:2013-08-13 23:08:14
【问题描述】:

跟进这篇文章:

http://r.789695.n4.nabble.com/importing-csv-gets-me-all-16-000-columns-with-quot-NA-quot-td3006480.html

一些背景:我正在开发一个允许用户上传 csv 文件的程序。目前,我正在测试一个如下所示的数据集:

Type    Date    Lively  Count
sm  1/13/2010   10  10
sm  1/14/2010   10  20
sm  2/15/2010   20  30
am  4/16/2010   5   42
am  1/17/2010   10  34
am  3/18/2010   40  54
sm  1/19/2010   10  65
sm  4/20/2010   5   67
sm  3/21/2010   40  76
sm  3/21/2010   70  76

当用户导入它时,一切都很好。我的导入方式是:

dataset <- read.csv(input$file$datapath)
dataset <- na.omit(dataset)

但是,假设用户将上表保存在 Excel 中,将其保存为 csv。然后他删除了最后两列。

Type    Date    
sm  1/13/2010   
sm  1/14/2010       
sm  2/15/2010   
am  4/16/2010   
am  1/17/2010   
am  3/18/2010   
sm  1/19/2010   
sm  4/20/2010   
sm  3/21/2010   
sm  3/21/2010   

如果我查看此表的 str(),最后 2 列现在包含 NA 值,因为在 Excel 中,这些列已经被格式化。我不能接受这些 NA 值,因为它们稍后会弄乱我的程序。我想摆脱他们。我的 na.omit() 似乎对 NA 没有任何作用。

我找到了使用

的解决方案
dataset[is.na(dataset)] <- c("")

用空白字符替换这些列,但是当我检查上传数据集的哪些列是字符时,这可能会让我感到困惑!

有没有人有更好的解决方案(告诉用户在另一个 Excel 工作表中上传文件不是一种选择)?

【问题讨论】:

    标签: r


    【解决方案1】:

    要删除仅包含 NA 的列:

    dataset [,colSums(is.na(dataset )) <nrow(dataset),drop=FALSE]
    

    【讨论】:

    • 哦,非常好,非常感谢先生。只是一个小的语法问题:nrow(dataset) 而不是 nrow(dat)
    【解决方案2】:

    我更喜欢这个解决方案来删除所有只有缺失值的列,

    dataset[,sapply(dataset, function(x)!all(is.na(x)))]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-07
      • 2017-01-19
      • 2014-12-13
      • 2015-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多