在for循环中跳过read.table中的行

时间:2016-04-07 12:48:10

标签: r

我使用以下方法导入大量文本文件:

d <- read.table(fid, skip = 21, header = FALSE, comment.char = '/', sep = '\t', fill = TRUE)

其中fid是在循环中定义的,所以我在每次迭代中加载一个不同的文件。我遇到的问题是我需要跳过的行数因文件而异。例如,在这个特定的文件中我需要跳过21,而在下一个文件中它将是22.我需要跳过的行在文件中由&#39; / *&#39;标识。例如:

/* DATA DESCRIPTION:
blah blah
blah blah
*/
data starts here

所以对于这个例子,我会使用

d <- read.table(fid, skip = 4, header = FALSE, comment.char = '/', sep = '\t', fill = TRUE)

我想到的一个选项是通过终端删除所有这些行,但必须有一种方法在R中执行此操作。

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

要跟进@Thomas的评论,您可以尝试以下方法:

for(file in fileList) {
  # find skip line
  temp <- readLines(file)
  skipLine <- which(temp == "*/")

  # read in file
  d <- read.table(file, skip = skipLine, header = FALSE, comment.char = '/', sep = '\t', fill = TRUE)
}

如果您知道注释行的最大数量且文件大小相当大,则可以在n函数的readLines()参数中使用此参数来减小读取的大小和加快这个过程。