如何在读取文件时删除异常值

时间:2013-08-20 15:50:07

标签: r

我有大量文件,每个文件都以制表符分隔的格式。我需要在每个文件上应用一些建模(glm / gbm等)。它们是从医院数据中获得的,在特殊情况下,条目可能不是正确的格式。例如,当为患者输入glucose级别时,数据输入操作员可能会错误地输入NA而不是实际的数字。

在循环中读取这些文件时,我遇到了问题,因为这些列(葡萄糖)被视为因子,而它应该是数字。调查每个文件并查找错误很痛苦。我正在以下列方式阅读文件,但这肯定不是一个好方法。

read.table(fn, header = TRUE,  sep= "\t" , na.strings = c('',  'NEG', 'TR', 'NA', '<NA>', "Done", "D", "A"))

是否还有其他功能可以假设这些值/异常值为na

2 个答案:

答案 0 :(得分:0)

您可以检查哪些元素不是数字(对于葡萄糖病例):

data = read.csv(file, as.is = TRUE, sep = '\t') # dont convert string to factor
glucose = data$glucose

sapply(glucose, function(x)!is.na(as.numeric(x)), USE.NAMES = FALSE)

然后你可以处理这些索引(插入或删除)。

循环文件:

files = list.files(path, '*.csv')
for (file in files)
{
  data = read.csv(file, sep = '\t', as.is = TRUE)
  gluc = data$glucose
  idxs = sapply(gluc, function(x)!is.na(as.numeric(x)), USE.NAMES = FALSE)
  # interpolate or remove here
}

答案 1 :(得分:0)

使用colClasses参数read.table和朋友指定哪些列应该是数字,然后R不需要尝试猜测。如果列被指定为数字,那么任何非数字的条目都将自动转换为NA