如何摆脱R中数据导入的NA值?

时间:2013-08-13 23:08:14

标签: r

关注这篇文章:

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列wold现在包含NA值,因为在Excel中,列已经被格式化。我不能接受这些NA值,因为它们后来搞乱了我的程序。我想摆脱他们。我的na.omit()似乎没有对NA做任何事情。

我找到了一个使用

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

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

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

2 个答案:

答案 0 :(得分:2)

删除仅包含NA的列:

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

答案 1 :(得分:1)

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

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