1

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

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

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

是否有任何其他功能可以让我假设这些值/异常值是na

4

2 回答 2

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
}
于 2013-08-20T16:12:45.470 回答
0

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

于 2013-08-20T18:41:48.670 回答