关注这篇文章:
一些背景知识:我正在开发一个允许用户上传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工作表中上传文件)?
答案 0 :(得分:2)
删除仅包含NA
的列:
dataset [,colSums(is.na(dataset )) <nrow(dataset),drop=FALSE]
答案 1 :(得分:1)
我更喜欢这个解决方案,删除所有只缺少值的列
dataset[,sapply(dataset, function(x)!all(is.na(x)))]