0

跟进这篇文章:

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 表中上传文件不是一种选择)?

4

2 回答 2

2

要删除仅包含的列NA

dataset [,colSums(is.na(dataset )) <nrow(dataset),drop=FALSE]
于 2013-08-13T23:31:25.133 回答
1

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

dataset[,sapply(dataset, function(x)!all(is.na(x)))]
于 2013-08-14T03:45:19.333 回答